File 理解文本文件和二进制文件之间的区别

File 理解文本文件和二进制文件之间的区别,file,text,binary,File,Text,Binary,我只是想确定我明白些什么 如果我的理解是正确的,那么计算机上的所有内容都是以二进制形式保存的,这意味着它们都是以一系列位的形式保存的,这些位是1和0二进制文件和文本文件都是这样保存的 从技术上讲,二进制文件和文本文件是相同的:它们都是一系列位。唯一的区别是,根据某种编码,文本文件应该由知道如何解析的程序解析并翻译成一系列字符。例如,一个.txt文件只是一个二进制文件-一系列位-但是像记事本这样的字处理器知道如何将每个字节翻译成你在屏幕上看到的字符 这就是所有的区别。我说得对吗 此外,使用“二进制

我只是想确定我明白些什么

如果我的理解是正确的,那么计算机上的所有内容都是以二进制形式保存的,这意味着它们都是以一系列位的形式保存的,这些位是1和0二进制文件和文本文件都是这样保存的

从技术上讲,二进制文件和文本文件是相同的:它们都是一系列位。唯一的区别是,根据某种编码,文本文件应该由知道如何解析的程序解析并翻译成一系列字符。例如,一个
.txt
文件只是一个二进制文件-一系列位-但是像记事本这样的字处理器知道如何将每个字节翻译成你在屏幕上看到的字符

这就是所有的区别。我说得对吗


此外,使用“二进制形式”比使用“文本形式”更有效的原因是,在文本中,每个字符都被编码为一个字节,即8位,而在“二进制形式”中,每个字节都可以有完整的含义,你不必为了说最简单的事情而浪费大量字节。这是否正确?

二进制文件将0-255存储在一个字节(8位)中 文本模式将105存储为一组3个字符(每个字符有一个字节,用ASCII表示)'1','0','5'

您可以打开文本文件并查看“105”,但105的二进制文件是人类无法识别的,而且更高效,更易于机器读取


还有其他区别,但这是主要的一点。

注意:让我们将多字节字符集放在一边,以便于理解

注意:考虑将ASCII用于文本文件的Unix(为简单起见,不考虑其他编码)


让我们了解字符串和字符数组之间的区别

8位的字节中,如果无符号,我们可以存储
0到255,如果有符号,可以存储-128到+127

作为一个整体,如果我们看到一个字节(
8位
),可以放入其中的值是
-128到255(范围)。ASCII字符的范围(
0到127

给定字符数组
a[10]
如果
a[0]到[9]
的任何字节的值超出了ASCII字符范围,则它不是字符串,而是字符数组。如果所有字节都在ASCII范围内(
0到127
),则它是字符串

总之,对于字符数组,范围可以是(
-128到255
)中的任意一个

这里的重要结论是,因为ASCII范围(
0到127
)是
-128到255
的适当子集,所有字符串都可以称为字符数组

现在,让我们将上述定义应用于二进制文件与文本文件

如果文件中的所有字节都在ASCII(
0到127
)范围内,则应将其称为文本文件

如果其中任何一个不在此范围内,即
(-128到-1
)或(
128到255
)中的任何一个,则它是一个二进制文件

总之,由于ASCII范围
0到127
是(
-128到255
)的适当子集,因此所有文本文件都是二进制文件

如果文件至少有一个字节从(
-128到-1
)或(
128到255
,则它不能是纯文本文件的二进制文件

我没有验证任何ASCII范围字符是否经过特殊处理的标准。但总的来说,我认为我把文本文件二进制文件之间的区别搞清楚了


希望这有帮助

字符集和编码不太可能是ASCII码。几十年来,许多系统都采用Unicode/UTF-8或Windows-1252(或类似)。UTF-8并不总是每个字符使用一个字节。为了清晰起见,我选择只关注原则。我确实指定了ASCII,当他准备好的时候,他会遇到UTF-8。我同意学习是迭代的,但我认为ASCII不是一个垫脚石,而是一个错误的方向。“如果文件中所有字节都在(32到96)范围内,它应该称为文本文件。”-绝对不是。想象一下,您的编译器生成了一个可执行文件,恰好满足了所有字节都在这个范围内的要求。你认为它是一个文本文件吗?文件不是基于它们是否可以执行来区分的。这就是我在上面澄清的。虽然shell脚本是可执行的,但它仍然是文本文件。文件根据每个字节包含的内容进行分类。希望这能澄清。你所说的是,一些包含纯机器代码的文件是文本文件。顺便说一句,我可以对jpg图像文件或其他文件使用相同的参数。不管是机器核心还是其他文件。我所说的是,如果文件中的每个字节都在范围(32到96)内,那么它完全是文本文件。但是,请理解“所有文本文件都是二进制文件”