【发布时间】:2014-09-19 10:30:03
【问题描述】:
据了解,在所有文件,特别是文本文件的末尾,EOF 或NULL 字符都有一个十六进制代码。而当我们想要编写程序并读取文本文件的内容时,我们会发送 read 函数,直到收到 EOF hexcode。
我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我看不到 EOF(End Of File/NULL) 或 EOT(End Of Text)
的任何十六进制代码ASCII/十六进制代码表:
这是十六进制查看器工具的输出:
注意:我的输入文件是一个文本文件,其内容是“EOF的十六进制代码在哪里?”
感谢您的时间和考虑。
【问题讨论】:
-
您在第一句话中的假设是错误的,在绝大多数情况下,文件中实际上不存在这样的字符。
EOF是库提供的一个符号值,用于通知程序员您已到达文件末尾。操作系统不需要知道文件在哪里结束(或者更确切地说,它不会将此信息存储在文件本身中)。 -
@user657267 我编写了一个程序,在文本文件中搜索字符“A”。如果文本中没有“A”,请将文件移动到特殊目录。我想知道有什么办法可以欺骗我的程序吗?例如“在我的输入文本中间添加一个 NULL/EOF/EOT 十六进制代码”?谢谢。
-
不太可能。在 cmd.exe 中,^Z 被视为输入的结尾,因此如果您执行
type whatever.txt之类的操作,如果文件恰好包含一个,它会在遇到 ^Z 时中断,但这仅适用于 Windows 命令行。用于编程的 io 库应该很乐意将其解析为另一个字符。 -
^Z 在 MS-DOS 文本文件中很常见,并且仍然适用于许多传输协议。我希望大多数 SO 用户不记得 MS-Kermit、xmoden、ymodem 等。它仍然是由 ind$file 生成的,而且是一件很麻烦的事。它会在 gedit 中抛出令人讨厌的消息,所以它确实存在。
-
@user657267 在某些情况下,操作系统可能不会从文件系统中读取,因此它需要提前知道文件大小,否则才能知道结束的位置。适用于流或原始。
标签: java c++ text-files hex-editors