Где находится шестнадцатеричный код символа "EOF"?

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

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


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

enter image description here

это вывод инструментов hex viewer:

enter image description here


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

ценю ваше время и внимание.

6 ответов


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

фактически, значение "EOF", возвращаемое, например, функциями C, такими как getchar явно int значение вне диапазона байт, поэтому он не может быть сохранена в файл!

иногда некоторые форматы файлов настаивают на добавлении нулевых Терминаторов (возможно, потому, что именно так строки обычно хранятся в C), хотя обычно они разделяют несколько записей в одном файле, а не файл в целом. И такое украшение обычно дисквалифицирует файл от того, чтобы считаться "текстовым файлом".

ASCII-коды, такие как ETX и NUL, датируются днями телетайпов и друзья. NUL используется в C для в памяти строки, но это не имеет никакого отношения к файловым системам.


был-давным-давно-Ан Конец Файла маркер, но он не использовался в файлах в течение многих лет.

вы можете продемонстрировать отдаленное эхо его на windows, используя:

C:\>copy con junk.txt
Hello
Hello again
- Press <Ctrl> and <z>
C:\>dump junk.txt
junk.txt:
00000000  4865 6c6c 6f0d 0a48 656c 6c6f 2061 6761 Hello..Hello aga
00000010  696e 0d0a                               in..
C:\>

обратите внимание на использование Ctrl-Z как маркер EOT.

однако обратите внимание, что Ctrl-Z больше не отображается в файле - раньше он отображался как 0x1a но только на некоторых операционных системах и даже тогда не всегда.

использование ETX (0x03) остановился еще до тех смутных и далеких времен.


нет такой вещи, как EOF. EOF-это просто значение, возвращаемое функциями чтения файлов, чтобы сообщить вам, что указатель файла достиг конца файла.


когда-то были даже разные символы EOF (для разных операционных систем). Больше никого не видел. (Как правило, файлы были в блоках по 128 байт.) Для кодирования питы, как в наши дни BOMs.

вместо этого есть еще int read() это обычно обеспечивает значение байта, но для EOF обеспечивает -1.

символ NUL является Терминатором строки В C. В java вы можете иметь символ NUL в середине строки. Чтобы сотрудничать с C, генерируемые байты UTF-8 используют a многобайтовые кодировки для символов Unicode > 127 и нул.

(некоторые из них, вероятно, уже известны.)


на EOT байт (0x04) используется по сей день терминалами unix tty для указания конца ввода. Вы печатаете его с Ctrl + D (т. е. ^D) для завершения ввода в оболочки или любое другое чтение программы из stdin.

однако, как указывали другие, это отличается от EOF, что является условием, а не частью данных как таковых.


нужно в конец файла символ в некоторых случаях, например отправка файла на принтер с компьютера Unix. Большинство принтеров с поддержкой Windows / dos ожидают, что маркер конца файла будет печатать файл, хранящийся в их памяти. Если маркер конца файла не отправляется, принтер просто сидит до истечения времени ожидания (обычно 2 минуты), а затем печатает файл. Если вы используете lpr для печати из Unix, вы должны обязательно включить маркер конца файла. Windows / dos прикрепляет его автоматически и принтеры предназначены для ожидания.