Código EOF ASCII/HEX em arquivos de texto

Código EOF ASCII/HEX em arquivos de texto

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:

insira a descrição da imagem aqui

Esta é a saída das ferramentas do visualizador Hex:

insira a descrição da imagem aqui


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.txtvez 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. unix2dose dos2unixsã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?

informação relacionada