我正在学习C语言中的FileIO,并且对二进制文件感到困惑。我的问题是,当我们总是可以使用ASCII或其他格式的文件时,使用二进制文件有什么用处,这些文件很容易理解。另外在哪些应用程序中二进制文件更有用? 对此非常感兴趣。谢谢!
答案 0 :(得分:5)
所有文件都是二进制的。 ASCII文件是包含可被视为“人类可读”数据的二进制文件的子集。纯二进制文件不限于可读的字符子集。
答案 1 :(得分:3)
访问速度
模糊处理
能够在不创建大型序列化文件的情况下将本机对象写入文件。
答案 2 :(得分:3)
ASCII很容易被人理解,但出于许多其他目的,计算机以二进制格式存储事物更有效,更容易。例如,如果要保留一个整数序列,计算机更容易读/写表示int
所需的4个字节,而不是写出数字的ascii表示,然后在阅读时解析它。
答案 3 :(得分:2)
至关重要的是,可以存储任何字节值,例如程序是二进制的。任何可能的二进制代码都可以是CPU的程序指令。
ASCII只存储7位值,因此浪费了一半的可能值。
此外,整数将被存储为什么?
数字4294967295可以存储在4个字节,32位中,但如果它以ASCII格式存储,则需要10个字符。此外,它需要处理将其转换为32位数。这些都不好。
32位数字是固定大小,因此很容易获得文件中的234856th值,只需寻找位置4 * 234856。
如果32位数字存储为ASCII,则它们必须始终占用10个字节,使文件大2.5倍,或者将它们存储为可变大小,这使得在不读取整个文件的情况下几乎不可能寻找特定值。
编辑:
值得补充的是(在正常使用中)人类无法看到文件中保存的数据。检查文件内容的唯一方法是运行可以读取和使用数据的程序。因此,人类的便利性是一个很小的考虑因素。
通常,数据以最方便的形式存储以供程序使用,表单的设计符合程序的目的。 ASCII是一种为文本编辑程序设计的格式,用于创建人类可读文档并支持显示文本的简单方法,这些方法仅限于英文字母,数字和一些标点符号。当我们想要支持所有人类书面语言时,ASCII太有限了。
我相信我们有超过一百万个字符代表人类书面语言(以及其他一些图片),我们还没有人类语言的字符。
UTF-8是一种表示我们到目前为止的书写字符的方法,多个字节。 UTF-8使用8位编码,超出了ASCII范围。
答案 4 :(得分:1)
将二进制文件视为数据的真实表示,直接由计算机程序解释,而不是由人类阅读。一个程序写出数据的开销很大,无论是ascii还是ascii格式的数字。最有可能的是,程序员必须发明一种协议,用于将数组,结构和标量写入ascii形式的文件中,因此它们可以是人类可读的,并且可以被程序读回并转换回二进制形式。 / p>
数据库表就是一个很好的例子。无论表中是否有文本或数字字段,数据库管理器都以二进制格式读取和写入该数据。根据需要更容易写出,读入然后转换,以显示您可以读取的任何数据。
Perception给出了一个我以前从未考虑过的好答案。所有数据都是二进制的,ascii是子集。那个答案让我想到了ftp并将模式设置为ascii或binary。如果我正在关闭存储在Linux系统上的Windows二进制文件,我告诉ftp将它们作为二进制文件传输。这意味着,不要将其解释为ascii文件,并在每行的末尾添加\ cr。有时我会将.csv和.txt数据转换为二进制文件,因为我知道Windows Excel知道如何解释这些非DOS文件。
答案 5 :(得分:0)
我不想写一个程序,必须编码/解码图像,音频文件,GIS数据,或航天器遥测,或<填空白>作为ASCII。