Código EOF ASCII/HEX en archivos de texto

Código EOF ASCII/HEX en archivos de texto

Hasta donde sabemos, al final de todos los archivos, especialmente los archivos de texto, hay un código hexadecimal paraEOFoNULOpersonaje. Y cuando queremos escribir un programa y leer el contenido de un archivo de texto, enviamos la función de lectura hasta que recibamos ese código hexadecimal EOF.

Mi pregunta: descargué algunas herramientas para ver una vista hexadecimal de un archivo de texto. pero no puedo ver ningún código hexadecimal paraEOF(Fin del archivo/NULL) oEOT(Fin del texto)


Tablas de códigos ASCII/Hexadecimal:

ingrese la descripción de la imagen aquí

Este es el resultado de las herramientas del visor hexadecimal:

ingrese la descripción de la imagen aquí


Nota: Mi archivo de entrada es un archivo de texto cuyo contenido es "¿Dónde está el código hexadecimal de "EOF"?"

Respuesta1

Tradicionalmente, en algunos contextos hay un 'carácter' de fin de archivo - MS-DOS/CMD.EXE usa CTRL+ Z - Linux usa CTRL+D

CTRL-Z es el código 26, CTRL-D es el código 4 en la tabla ASCII.

Estos todavía están en uso en situaciones en las que los usa stdin(en el sentido que se aplica en la programación "C" y la consola general/tty IO).

p.ej

C:\> copiar con myFile.txt
Este es el texto para ingresar al archivo. Enter
CTRL+Z
C:\> escriba miArchivo.txt
Este es el texto para ingresar al archivo.
C:\>

La misma secuencia funciona en Linux con la diferencia de que comienzas con

$ gato >miArchivo

y termina con CTRL+ D, luego cat myFile.txten lugar de type.

... Sin embargo, si estás programando, difícilmente verás ningún efecto de estos personajes.
En el momento de escribir este artículo no tengo conocimiento de ninguna llamada a función que se detenga en estos caracteres.
Lea la documentación de su software/biblioteca; si no hay ninguna declaración sobre el efecto de estos, entonces no es probable que vea que suceda nada extraño.

Sin embargo, los finales de línea (combinaciones CR y LF, códigos 13 y 10) son un poco diferentes; puede resultar bastante complicado si transfieres archivos de TEXTO de un sistema a otro. unix2dosy dos2unixhay comandos de shell disponibles en Linux para este propósito.

Sesión de bash de muestra:

$ echo -e "Primera línea\n\x04Segunda línea."
Primera linea
Segunda linea.

$ echo -e "Primera línea\n\x04Segunda línea." | od -t x1z
0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f >Primera línea..Seco<
0000020 6e 64 20 6c 69 6e 65 2e 0a >segunda línea..<
0000031

$ echo -e "Primera línea\n\x04Segunda línea." | línea grep
Primera linea
Segunda linea.

$ gato >miArchivo.txt
Mira esto

$ cat miArchivo.txt
Mira esto

$

Respuesta2

No, EOF no es un personaje especial, jajaja :)

Echar un vistazo:http://www.cplusplus.com/reference/cstdio/EOF/

Básicamente es una 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().

Eso significa que la API intenta leer una línea de archivo, obtiene -1 y devuelve EOF. A diferencia de EOF, los CR/LF son caracteres especiales que puedes verlos en el Editor HEX si tienes algunos saltos de línea:

'\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).

Aparte de los archivos, hay un carácter '\0' al final de la matriz de caracteres en la memoria, que marca el final de la cadena. Sin él, la computadora no tiene forma de saber cuánto dura ese grupo de personajes. Cuando imprimes/copias/lo que sea una cadena, sigue imprimiendo/copiando caracteres hasta que encuentra ese carácter nulo... ahí es cuando sabe que debe detenerse.

¿Quizás te refieres a este NULL?

información relacionada