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

38 c++ java hex-editors text-files

至于所有文件的末尾,特别是文本文件,有一个EOFNULL字符的十六进制代码.当我们想要编写程序并读取文本文件的内容时,我们发送读取函数,直到我们收到该EOF十六进制代码.

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


ASCII/Hex代码表:

在此输入图像描述

这是Hex查看器工具的输出:

在此输入图像描述


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

感谢您的时间和考虑.

小智 37

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

事实上,例如C函数返回的"EOF"值getchar显然是一个字节范围之外的int值,因此它不可能存储在文件中!

有时,某些文件格式坚持添加NUL终止符(可能因为字符串通常存储在C中),尽管通常这些格式在单个文件中划分多个记录,而不是整个文件.而这样的装饰通常会使文件被视为"文本文件".

像ETX和NUL这样的ASCII码可以追溯到电传打字机和朋友的日子.NUL在C中用于内存中的字符串,但这与文件系统无关.

  • @ User1-St取决于你如何阅读文件并进行搜索(正如我所说,许多**C**函数认为NUL表示内存中字符串的结尾),但没有不可克服的困难. (2认同)

Old*_*eon 17

很久很久以前 - 文件结束标记,但多年来一直没有在文件中使用过.

您可以使用以下命令在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:\>
Run Code Online (Sandbox Code Playgroud)

注意使用Ctrl-ZEOT标记.

但是,请注意,Ctrl-Z文件中不再显示 - 它过去只显示为0x1a某些操作系统,但不是一致的.

即使在昏暗和遥远的时间之前,ETX(0x03)的使用也已停止.


Dav*_* Xu 9

没有EOF这样的东西.EOF只是文件读取函数返回的值,用于告诉您文件指针到达文件末尾.


kra*_*lyk 5

至今,unix tty 终端仍使用字节 ( ) 来指示输入结束EOT0x04您可以使用Ctrl+ D(即^D)键入它来结束对 shell 或从 stdin 读取的任何其他程序的输入。

然而,正如其他人指出的那样,这与 EOF 不同,EOF 是一个条件,而不是一条数据本身。