Подтвердить что ты не робот

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

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

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


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

enter image description here

Это результат использования инструментов просмотра Hex:

enter image description here


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

Оцените свое время и внимание.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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) остановлено даже до тех далеких и отдаленных времен.

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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