【问题标题】:Understanding the difference between text files and binary files [closed]了解文本文件和二进制文件之间的区别 [关闭]
【发布时间】:2014-09-27 12:55:58
【问题描述】:

我只是想确保我理解了一些东西。

如果我的理解是正确的,计算机上的所有内容都以二进制形式保存,这意味着它们都保存为一系列位,即 1 和 0。 “二进制文件”以这种方式保存,文本文件也是如此。

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

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

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

【问题讨论】:

    标签: file text binary


    【解决方案1】:

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

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


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

    8 bits的一个字节中,如果未签名,我们可以存储0 to 255,如果已签名

    ,我们可以存储-128 to +127

    作为一个整体,如果我们看到一个字节(8 bits),那么可以适应它的值是-128 to 255(范围)。 ASCII 字符范围(0 to 127)。

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

    对于字符数组的总结,范围可以是 (-128 to 255) 中的任何一个。

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

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

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

    如果其中任何一个超出此范围,即 (-128 to -1) 或 (128 to 255) 中的任何一个,则它是一个二进制文件。

    总之,由于 ASCII 范围 0 to 127 是 (-128 to 255) 所有文本文件都是二进制文件的真子集。

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

    如果任何 ASCII 范围字符有特殊处理,我还没有验证标准。但总而言之,我认为我已经明确区分了 文本文件二进制文件

    希望对你有帮助

    【讨论】:

    • “如果文件中的所有字节都在 (32 到 96) 范围内,则应将其称为 TEXT 文件。” - 绝对不是。想象一下,您的编译器生成的可执行文件恰好满足所有字节都在这个范围内。你会认为它是一个文本文件吗?
    • 文件不根据是否执行来区分。这就是我在顶部澄清的内容。例如:虽然 shell 脚本是可执行的,但它仍然是文本文件。文件根据每个字节包含的内容进行分类。希望澄清。
    • 你的意思是一些包含纯机器码的文件是文本文件。
    • 顺便说一句,我可以对 jpg 图像文件或其他文件使用相同的参数。
    • 不管是机器核心还是其他东西我说的是如果文件中的每个字节都在范围(32到96)内,那么它是严格的文本文件。但是请理解“所有文本文件都是二进制文件”
    【解决方案2】:

    二进制将 0-255 存储在单个字节(8 位)中 文本模式将 105 存储为一组 3 个字符(每个字符是一个字节,在 ASCII 中)“1”、“0”、“5”。

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

    还有其他区别,但这是重点。

    【讨论】:

    • 字符集和编码不太可能是 ASCII。几十年来,在许多系统上它一直是 Unicode/UTF-8 或 Windows-1252(或类似)。 UTF-8 并不总是每个字符使用一个字节。
    • 为了清楚起见,我选择只关注原则。而且我确实指定它是 ASCII,当他准备好时,他会遇到 UTF-8。
    • 我同意学习是迭代的,但我认为 ASCII 不是垫脚石,而是误导。
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 2021-12-20
    • 2014-05-06
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多