1

Насколько известно, в конце всех файлов, особенно текстовых, есть шестнадцатеричный код для символа EOF или NULL . И когда мы хотим написать программу и прочитать содержимое текстового файла, мы отправляем функцию чтения, пока не получим этот шестнадцатеричный код EOF.

Мой вопрос: я скачал несколько инструментов, чтобы увидеть шестнадцатеричное представление текстового файла. но я не вижу никакого шестнадцатеричного кода для EOF(конец файла /NULL) или EOT(конец текста)


ASCII/Hex кодовые таблицы:

Это выходные данные инструментов просмотра Hex:


Примечание. Мой входной файл - это текстовый файл, содержимое которого имеет вид «Где шестнадцатеричный код" EOF "?"

2 ответа2

1

Нет, EOF не особенный персонаж, смеется :)

Посмотрите: http://www.cplusplus.com/reference/cstdio/EOF/

Это в основном макрос:

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().

Это означает, что API пытается прочитать строку файла, получить -1 и вернуть EOF. В отличие от EOF, CR/LF являются такими специальными символами, вы можете увидеть их в HEX-редакторе, если у вас есть разрывы строк:

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

Помимо файлов, в конце массива символов в памяти есть символ '\0', он отмечает конец строки. Без этого у компьютера нет возможности узнать, как долго проходит эта группа символов. Когда вы печатаете / копируете / что угодно, строка просто продолжает печатать / копировать символы до тех пор, пока не найдет этот нулевой символ ... вот тогда он и узнает, что нужно остановить.

Может быть, вы имеете в виду этот NULL?

1

Традиционно в некоторых контекстах есть символ конца файла - MS-DOS / CMD.EXE использует CTRL+Z - Linux использует CTRL+D

CTRL-Z - это код 26, CTRL-D - это код 4 в таблице ASCII.

Они все еще используются в ситуациях, когда вы используете стандартный stdin (в значении, применяемом в программировании "C" и общем консольном /tty IO).

например

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:\> 

Та же самая последовательность работает в Linux'е с той разницей, с которой вы начинаете

$ cat >myFile

и заканчивается CTRL+D, затем cat myFile.txt вместо type .

... Если вы программируете, вы вряд ли увидите какие-либо эффекты этих персонажей.
Я на момент написания этой статьи не знал ни о каком вызове функции, который остановился бы на этих символах.
Прочитайте документацию по вашему программному обеспечению / библиотеке - если нет никаких заявлений об их влиянии, то вряд ли вы увидите что-то странное.

Окончания строк - комбинации CR и LF, коды 13 и 10 - немного отличаются, однако, это может стать довольно грязным, если вы переносите файлы TEXT из одной системы в другую. unix2dos и dos2unix - это команды оболочки, доступные в Linux'en - для этой цели.

Пример сессии bash:

$ 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

$ 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .