Насколько известно, в конце всех файлов, особенно текстовых, есть шестнадцатеричный код для EOF или же НОЛЬ персонаж. И когда мы хотим написать программу и прочитать содержимое текстового файла, мы отправляем функцию чтения, пока не получим этот шестнадцатеричный код EOF.
Мой вопрос: я скачал несколько инструментов, чтобы увидеть шестнадцатеричное представление текстового файла. но я не вижу никакого шестнадцатеричного кода для EOF(Конец файла / NULL) или СРВ(Конец текста)
ASCII / Hex кодовые таблицы:
Это выходные данные инструментов просмотра Hex:
Примечание. Мой входной файл — это текстовый файл, содержимое которого имеет вид «Где шестнадцатеричный код« EOF »?»
Цените ваше время и внимание.
Нет такой вещи как персонаж EOF. Операционная система точно знает, сколько байтов содержится в файле (он хранится вместе с другими метаданными, такими как разрешения, дата создания и имя), и, следовательно, может сообщать программам, которые пытаются прочитать одиннадцатый байт десятибайтового файла: достиг конца файла, больше нет байтов для чтения.
Фактически, значение «EOF» возвращается, например, такими функциями C, как getchar
явно int
значение вне диапазона байта, поэтому он не может быть сохранен в файле!
Иногда определенные форматы файлов настаивают на добавлении терминаторов NUL (возможно, потому, что именно так строки обычно хранятся в C), хотя обычно они разделяют несколько записей в одном файле, а не в файле в целом. И такое оформление обычно лишает файл права считать текстовым файлом.
Коды ASCII, такие как ETX и NUL, относятся ко времени телетайпов и друзей. NUL используется в C для в памяти строки, но это не имеет отношения к файловым системам.
Был — давным-давно — Конец файла маркер, но он не использовался в файлах в течение многих лет.
Вы можете продемонстрировать отдаленное эхо этого на окнах, используя:
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 байт.) Для кодирования PITA, как современные спецификации.
Вместо этого все еще есть int read()
это обычно обеспечивает значение байта, но для EOF — -1.
NUL-символ — это строковый терминатор в C. В Java вы можете иметь NUL-символ в середине строки. Чтобы взаимодействовать с C, сгенерированные байты UTF-8 используют многобайтовую кодировку как для символов Unicode> 127, так и для NUL.
(Часть этого, вероятно, уже известна.)
EOT
байт (0x04
) используется по сей день unix tty терминалами для обозначения конца ввода. Вы вводите это с Ctrl + D (То есть. ^D
) для завершения ввода в оболочку или любую другую программу чтения из стандартного ввода.
Однако, как отмечали другие, это отличается от EOF, который является условием, а не частью данных как таковой.
В некоторых случаях вам нужен символ конца файла, например, отправка файла на принтер с компьютера Unix. Большинство принтеров с поддержкой Windows / DOS ожидают, что маркер конца файла напечатает файл, сохраненный в их памяти. Если маркер конца файла не отправляется, принтер просто садится до истечения времени ожидания (обычно 2 минуты) и затем печатает файл. Если вы используете lpr для печати из Unix, обязательно добавьте маркер конца файла. Windows / DOS прикрепляет его автоматически, и принтеры рассчитаны на его ожидание.