为什么用十六进制(二进制)而不是纯文本保存数据文件?

时间:2012-05-03 18:35:25

标签: hex

我正在查看无限引擎(在Baldur's Gate等游戏中使用的那个)file formats,并查看文件结构我要点,为什么要以十六进制格式保存引擎文件(I认为这也被称为“二进制格式”而不仅仅是纯文本?

我有一些假设(不同于stackoverflow规则“避免你的答案与问题一起提供,你希望得到更多答案”):

  1. 尝试保留文件的知识产权(无用)。
  2. 为了节省空间,因为有些文件可以变得非常大,而且当时(1990年代末)空间不像现在这么大。
  3. 要获得结构化数据(这也可以通过在平面文件中使用固定长度的标签来实现)。

2 个答案:

答案 0 :(得分:3)

Hexadecimal不是二元的。

在十六进制中,每个字符(ASCII编码的字节/八位字节)可以表示16个值:0-9和A-F。它需要两个十六进制字符来表示256个值。

在“二进制文件”中,每个字节(八位字节)可以表示256个值。

现在,使用二进制文件的关键在于它是“最原始”的格式,并且不需要以任何方式将其自身用于人类消费。这大大增加了文件的数据/八位字节比。

二进制格式可以帮助“IP”,但这不一定是主要目标。粉丝编写了大量的编辑工具(如证据所示),以及不时的官方工具。

二进制文件结构可以在偏移中确定,并且可以直接搜索而不需要像文本文件一样“读取到行X和列Y”。这使得资源的随机访问更加有效。对于许多Baulder的Gate文件,许多都采用“固定格式”,并且可以简单(快速)加载到相同布局的内存结构中。 (有时堆和其他数据结构将直接编码在二进制文件中。)

二进制文件是数据 opaque 结构:它只是结束的手段。内部的信息仅用于在特定方案中访问。 (将其与JSON或SQL数据库进行比较;前者不是不透明的,因为它是“人类消费品”而后者仅暴露信息。)

查看不同的种二进制文件以及每个文件提供的服务:音频?图片?路线?实体位置和统计数据?对话?每一个都是根据发动机的特定需求精心设计的,虽然有些“可以做得不同”,但如果没有必要并且现有的工具已经到位:为什么要改变?

答案 1 :(得分:0)

更紧凑,不需要字符串解析。例如存储数字'123',你将需要一个字节。要存储字符串“123”,您将需要三个字节,并且长度至少需要一个字节。如果有人认为今天我们不需要考虑空间,那么他/她就不应该编写代码。这使得好的和坏的应用程序之间存在差异。