二进制文件中的\x00表示什么?

45

有一次我问一个人,“ASCII文件和二进制文件有什么区别?”

他说,“二进制文件总是有 \x00”。

我搜索了一下,找到了一个问题:PHP 中 \x00 和 \x04 的含义是什么?

因此,结论是,ASCII 文件没有 NULL 字符?


1
那个人要么不知道他在说什么,要么你误解了他(顺便说一下,那不是异或运算)。 - user395760
问题应该是:文本文件二进制文件之间有什么区别?ASCII文件是只包含0到127范围内十进制值的字节的文件。这可以是文本文件或二进制文件。PHP被设计用于处理__文本__文件,这些文件也可以包含不在ASCII表中的字符,使用Windows-1252、UTF-8或其他编码进行字符编码 - Mofi
__文本__文件在大多数字符编码中不包含空字节。但是,使用UTF-16UCS-2UTF-32对文本文件进行Unicode编码时,会有许多空__字节__,这些字节不被解释为空字符。对于计算机来说,只存在0和1。如何解释一串0和1由定义、规则和标准来确定。 - Mofi
2个回答

26

ASCII文件可能被读取或解释为具有以NULL结尾的字符串、回车和换行符或其他控制字符,这些字符旨在被读取并执行相应操作。例如,文本阅读器可能会查找一行文本,其中一行是“在您到达换行符之前看到的任意字符”。

二进制文件被认为只是一个字节序列,它们中没有任何一个具有特殊含义,无法像文本阅读器那样解释。

\x00是一个特定字节值(十六进制0)的示例,可能会被文本阅读器以特殊方式解释。


-2

不对。ASCII文件中有NULL字符。事实上,ASCII中的每个字符串都以NULL结尾。

ASCII文件是仅包含ASCII字符x0-x127的文件。

二进制文件包含数据,每个单独的字节可以是ASCII字符、整数、指针等。这只是如何将数据写入文件以及如何读取它的方式不同而已。


仅仅因为一个文件没有空值并不意味着 NULL 不是 ASCII 的一部分。根据 ASCII,NULL 实际上是第一个 ASCII 字符 :) http://www.cdrummond.qc.ca/cegep/informat/Professeurs/Alain/files/ascii.htm - Aater Suleman
2
我没有得出任何结论,我进行了搜索和测试。你做过吗? - Bagong21
是的,我已经检查过了。但这怎么能说明ASCII文件不包含NULL呢?有地方说过吗? - Aater Suleman
是的,已经测试过了,我可以写入和读取一个含有 null 的 ascii 文件。如果你向文件中写入 null,则 hexdump 将显示 null,这是预期的结果。只是恰好你上传的文件中没有 null。你可以使用 Perl/C/Python 编写一个 ascii 文件,并使用 \0 放入 null,然后使用任何编辑器打开它以确认其有效性,然后将其上传到 hexdump。伙计,我学习计算机已经10年了,我每天都在设计他们。它们是简单的设备,而不是魔术。如果 null 是 ASCII 的一部分,它就可以出现在 ASCII 文件中(根据定义)。 - Aater Suleman
19
这是一份旧的答案,但是为了记录:通用的说法“ASCII 文件具有 NULL 字符”是具有误导性的,而说“每个 ASCII 字符串都以 NULL 结尾”则是错误的。ASCII 文件只是包含 ASCII 字符的文件,它可能包含 NULL,也可能不包含。在 ASCII 文件中,NULL 没有特定的含义,它肯定不会定期充当终止标记。真正的情况是,一些语言(例如 C )将 NULL 用于内存中字符串的结尾标记。程序员可能决定在文件中使用此表示方式,但没有义务这样做。 - Schmuddi
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接