Pelo que se sabe no final de todos os arquivos, especialmente arquivos de texto, existe um código Hex paraEOFouNULOpersonagem. E quando queremos escrever um programa e ler o conteúdo de um arquivo de texto, enviamos a função read até recebermos aquele código hexadecimal EOF.
Minha pergunta: baixei algumas ferramentas para ver uma visualização hexadecimal de um arquivo de texto. mas não consigo ver nenhum código hexadecimal paraEOF(Fim do arquivo/NULL) ouEOT(Fim do texto)
Tabelas de códigos ASCII/Hex:
Esta é a saída das ferramentas do visualizador Hex:
Nota: Meu arquivo de entrada é um arquivo de texto cujo conteúdo é "Onde está o código hexadecimal de" EOF "?"
Responder1
Tradicionalmente, em alguns contextos existe um 'caractere' de fim de arquivo - MS-DOS/CMD.EXE usa CTRL+ Z - Linux usa CTRL+D
CTRL-Z é o código 26, CTRL-D é o código 4 na tabela ASCII.
Eles ainda estão em uso em situações em que você usa stdin
(no significado aplicado na programação "C" e console geral/tty IO).
por exemplo
C:\> copiar com meuArquivo.txt Este é o texto para entrar no arquivo. Enter CTRL+Z C:\> digite meuArquivo.txt Este é o texto para entrar no arquivo. C:\>
A mesma sequência funciona no Linux com a diferença de que você começa com
$ cat >meuArquivo
e termine com CTRL+ De, em cat myFile.txt
vez de type
.
... Porém, se você estiver programando, dificilmente verá quaisquer efeitos desses personagens.
Até o momento, não estou ciente de nenhuma chamada de função que pare nesses caracteres.
Leia a documentação do seu software/biblioteca - se não houver nenhuma declaração sobre o efeito deles, é provável que você não veja nada de estranho acontecer.
Os finais de linha - combinações CR e LF, códigos 13 e 10 - são um pouco diferentes, porém, podem ficar bastante confusos se você transferir arquivos TEXT de um sistema para outro.
unix2dos
e dos2unix
são comandos shell disponíveis no Linux - para esta finalidade.
Exemplo de sessão bash:
$ echo -e "Primeira linha\n\x04Segunda linha." Primeira linha Segunda linha. $ echo -e "Primeira linha\n\x04Segunda linha." | od-t x1z 0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f >Primeira linha..Seco< 0000020 6e 64 20 6c 69 6e 65 2e 0a >última linha..< 0000031 $ echo -e "Primeira linha\n\x04Segunda linha." | linha grep Primeira linha Segunda linha. $ gato >meuArquivo.txt Veja isso $ gato meuArquivo.txt Veja isso $
Responder2
Não, EOF não é um caractere especial, haha :)
Dê uma olhada:http://www.cplusplus.com/reference/cstdio/EOF/
É basicamente uma macro:
End-of-File
It is a macro definition of type int that expands into a negative integral constant expression (generally, -1).
It is used as the value returned by several functions in header <cstdio> to indicate that the End-of-File has been reached or to signal some other failure conditions.
It is also used as the value to represent an invalid character.
In C++, this macro corresponds to the value of char_traits<char>::eof().
Isso significa que a API tenta ler uma linha do arquivo, obtém -1 e retorna EOF. Em contraste com EOF, os CR/LF são caracteres tão especiais que você pode vê-los no Editor HEX se tiver algumas quebras de linha:
'\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF).
'\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).
Além dos arquivos, existe um caractere '\0' no final da matriz de caracteres na memória, que marca o final da string. Sem ele, o computador não tem como saber quanto tempo dura aquele grupo de personagens. Quando você imprime/copia/qualquer string, ele continua imprimindo/copiando caracteres até encontrar aquele caractere nulo... é quando ele sabe que deve parar.
Talvez você queira dizer este NULL?