“EOF”字符的十六进制代码在哪里?

2022-09-01 00:00:38

据了解,在所有文件(特别是文本文件)的末尾,EOFNULL字符都有一个十六进制代码。当我们想要编写程序并读取文本文件的内容时,我们会发送读取函数,直到收到EOF十六进制代码。

我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我看不到EOF(文件末尾/NULL)或EOT(文本结束)的任何十六进制代码


ASCII/十六进制代码表 :

enter image description here

这是十六进制查看器工具的输出:

enter image description here


注意:我的输入文件是一个文本文件,其内容是“EOF”的十六进制代码在哪里?

感谢您的时间和考虑。


答案 1

没有 EOF 字符这样的东西。操作系统确切地知道文件包含多少字节(这与权限,创建日期和名称等其他元数据一起存储),因此可以告诉尝试读取十字节文件的第十一个字节的程序:您已经到达了文件的末尾,没有更多的字节要读取。

实际上,例如C函数返回的“EOF”值是显式超出字节范围的值,因此它不可能存储在文件中!getcharint

有时,某些文件格式坚持添加NUL终止符(可能是因为这是字符串通常存储在C中的方式),尽管通常这些格式在单个文件中分隔多个记录,而不是整个文件。这种修饰通常会使文件失去被视为“文本文件”的资格。

像ETX和NUL这样的ASCII代码可以追溯到电传打字机和朋友的时代。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:\>

请注意用作 EOT 标记。Ctrl-Z

但是,还要注意,不再出现在文件中 - 它曾经显示为,但仅在某些操作系统上出现,甚至不一致。Ctrl-Z0x1a

()的使用甚至在那些昏暗而遥远的时代之前就停止了。ETX0x03


推荐