2

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

我有一些假设(与“避免您的答案与问题一起提供,并且您期望更多答案”的stackoverflow规则不同):

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

2 回答 2

3

十六进制不是二进制。

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

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

现在,使用二进制的意义在于它是“最原始”的格式,不需要以任何方式供人类使用。这大大增加了文件的数据/八位字节比率。

二进制格式有助于“IP”,但这不一定是主要目标。有很多粉丝编写的编辑器工具(如证据所示),以及不时出现的官方工具。

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

二进制文件是数据的不透明结构:它只是结束的手段。里面的信息只为特定场景下的访问而设计。(将此与 JSON 或 SQL 数据库进行比较;前者不是不透明的,因为它是“人类可消费的”,而后者仅公开信息。)

看看不同种类的二进制文件和每个文件提供的服务:音频?图片?路线?实体位置和统计信息?对话?每一个都是根据引擎的特定需求而制作的,虽然有些“可以做不同的”,但如果不需要并且现有工具已经到位:为什么要改变?

于 2012-05-03T18:47:07.533 回答
0

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

于 2012-05-03T18:43:13.807 回答