Код EOF ASCII/HEX в текстовых файлах

Код EOF ASCII/HEX в текстовых файлах

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

Мой вопрос: Я загрузил несколько инструментов, чтобы увидеть шестнадцатеричное представление текстового файла. Но я не вижу никакого шестнадцатеричного кода дляЕОФ(Конец файла/NULL) илиЭОТ(Конец текста)


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

введите описание изображения здесь

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

введите описание изображения здесь


Примечание: Мой входной файл представляет собой текстовый файл, содержимое которого — «Где шестнадцатеричный код «EOF»?»

решение1

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

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

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

например

C:\> копировать в myFile.txt
Это текст для вставки в файл. Enter
CTRL+Z
C:\> введите myFile.txt
Это текст, который нужно добавить в файл.
С:\>

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

$ cat >мойФайл

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

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

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

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

$ echo -e "Первая строка\n\x04Вторая строка."
Первая линия
Вторая линия.

$ echo -e "Первая строка\n\x04Вторая строка." | od -t x1z
0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f >Первая строка..Вторая<
0000020 6e 64 20 6c 69 6e 65 2e 0a >я строка..<
0000031

$ echo -e "Первая строка\n\x04Вторая строка." | grep line
Первая линия
Вторая линия.

$ cat >мойФайл.txt
Проверь это

$ cat мойФайл.txt
Проверь это

$

решение2

Нет, 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?

Связанный контент