文本文件中的 EOF ASCII/HEX 代码

文本文件中的 EOF ASCII/HEX 代码

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

我的问题:我下载了一些工具来查看文本文件的十六进制视图。但我看不到任何十六进制代码末梢血(文件结束/NULL)或终止时间(正文完)


ASCII/Hex 代码表:

在此处输入图片描述

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

在此处输入图片描述


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

答案1

传统上,在某些情况下,存在文件结束“字符” - MS-DOS / CMD.EXE 使用CTRL+ Z - Linux 使用CTRL+D

在 ASCII 表中,CTRL-Z 是代码 26,CTRL-D 是代码 4。

这些在您使用的情况下仍然有用stdin(在“C”编程和通用控制台/tty IO 中应用的含义)。

例如

C:\> 复制 myFile.txt
这是要放入文件中的文本。Enter
CTRL+Z
C:\> 输入 myFile.txt
这是要放入文件中的文本。
目录:\>

在 Linux 中,同样的顺序也适用,不同之处在于你首先要

$ cat> myFile

CTRL并以+结尾D,然后cat myFile.txt代替type

... 但是,如果你正在编程,你几乎看不到这些字符的任何效果。
在撰写本文时,我还没有发现任何函数调用会在这些字符处停止。
阅读软件/库的文档 - 如果没有关于这些效果的声明,那么你不太可能看到任何奇怪的事情发生。

行尾 - CR 和 LF 组合,代码 13 和 10 - 有点不同,如果你将 TEXT 文件从一个系统传输到另一个系统,它可能会变得相当混乱。 unix2dos并且dos2unix在 Linux'en 上有可用的 shell 命令 - 用于此目的。

示例 bash 会话:

$ echo -e "第一行\n\x04第二行。"
第一行
第二行。

$ echo -e "第一行\n\x04第二行。" | od -t x1z
0000000 46 69 72 73 74 20 6c 69 6e 65 0a 04 53 65 63 6f >第一行..第二行<
0000020 6e 64 20 6c 69 6e 65 2e 0a >第 1 行..<
0000031

$ echo -e "第一行\n\x04第二行。" | grep line
第一行
第二行。

$ cat >myFile.txt
看一下这个

$ cat myFile.txt
看一下这个

$

答案2

不,EOF 不是一个特殊字符,哈哈:)

看一看:http://www.cplusplus.com/reference/cstdio/EOF/

它基本上是一个宏:

End-of-File
It is a macro definition of type int that expands into a negative integral constant expression (generally, -1).

It is used as the value returned by several functions in header <cstdio> to indicate that the End-of-File has been reached or to signal some other failure conditions.

It is also used as the value to represent an invalid character. 

In C++, this macro corresponds to the value of char_traits<char>::eof().

这意味着,API 尝试读取文件中的一行,得到 -1 并返回 EOF。与 EOF 相比,CR/LF 是特殊字符,如果您有一些换行符,您可以在 HEX 编辑器中看到它们:

'\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF).
'\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).

除了文件之外,内存中字符数组的末尾还有一个 '\0' 字符,它标记字符串的结尾。没有它,计算机就无法知道该组字符有多长。当您打印/复制/无论什么字符串时,它都会继续打印/复制字符,直到找到该空字符……那时它就知道该停止了。

也许你的意思是这个NULL?

相关内容