![Код EOF ASCII/HEX в текстовых файлах](https://rvso.com/image/1417121/%D0%9A%D0%BE%D0%B4%20EOF%20ASCII%2FHEX%20%D0%B2%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D1%85%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85.png)
Насколько мне известно, в конце всех файлов, особенно текстовых, есть шестнадцатеричный кодЕОФилиНУЛЕВОЙсимвол. И когда мы хотим написать программу и прочитать содержимое текстового файла, мы отправляем функцию чтения до тех пор, пока не получим этот шестнадцатеричный код 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?