EOF código ASCII / HEX em arquivos de texto

1

Tanto quanto sabemos no final de todos os arquivos, especialmente arquivos de texto, há um código Hex para o caractere EOF ou NULL . E quando queremos escrever um programa e ler o conteúdo de um arquivo de texto, enviamos a função de leitura até recebermos esse código hexadecimal de EOF.

Minha pergunta: eu baixei algumas ferramentas para ver uma visualização hexadecimal de um arquivo de texto. mas não consigo ver nenhum código hexadecimal para EOF (Fim do Arquivo / NULL) ou EOT (Fim do Texto)

Tabelas de códigos ASCII / Hex:

EstaéasaídadasferramentasdovisualizadorHex:

Nota: Meu arquivo de entrada é um arquivo de texto cujo conteúdo é "Onde está o código hexadecimal de" EOF "?"

    
por Abraham 28.07.2014 / 11:07

2 respostas

1

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.

Estes ainda estão em uso em situações em que você usa stdin (no significado aplicado na programação "C" e no console geral / tty IO).

por exemplo.

C:\> copy con myFile.txt
This is text to go into the file.Enter
CTRL+Z
C:\> type myFile.txt
This is text to go into the file.
C:\> 

A mesma sequência funciona no Linux'en com a diferença que você começa com

$ cat >myFile

e finalizar com CTRL + D e, em seguida, cat myFile.txt em vez de type .

Se você estiver programando, dificilmente verá quaisquer efeitos desses caracteres.
Eu estou neste momento escrevendo não ciente de qualquer chamada de função que iria parar nesses caracteres.
Leia a documentação do seu software / biblioteca - se não houver nenhuma declaração sobre o efeito disso, você provavelmente não verá nada de estranho acontecer.

Endings de linha - combinações CR e LF, código 13 e 10 - é um pouco diferente, mas pode ficar bastante confuso se você transferir arquivos de texto de um sistema para outro. unix2dos e dos2unix são comandos shell disponíveis no Linux'en - para este propósito.

Sessão de bash de amostra:

$ echo -e "First line\n\x04Second line."
First line
Second line.

$ echo -e "First line\n\x04Second line." | od -t x1z
0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f  >First line..Seco<
0000020 6e 64 20 6c 69 6e 65 2e 0a                       >nd line..<
0000031

$ echo -e "First line\n\x04Second line." | grep line
First line
Second line.

$ cat >myFile.txt
Check this out

$ cat myFile.txt
Check this out

$ 
    
por 28.07.2014 / 12:10
1

Não, EOF não é um caractere especial, lol:)

Dê uma olhada: link

É 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 de arquivo, get -1 e retorna EOF. Em contraste com o EOF, o CR / LF são caracteres especiais, 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, há um caractere '\ 0' no final da matriz de caracteres na memória, que marca o final da string. Sem isso, o computador não tem como saber por quanto tempo esse grupo de caracteres vai. Quando você imprime / copia / o que quer que seja uma string, ele apenas imprime / copia chars até encontrar aquele caracter nulo ... é quando ele sabe parar.

Talvez você esteja falando dessa NULL?

    
por 28.07.2014 / 11:10