我正在查看无限引擎(在Baldur's Gate等游戏中使用的那个)file formats,并查看文件结构我要点,为什么要以十六进制格式保存引擎文件(I认为这也被称为“二进制格式”而不仅仅是纯文本?
我有一些假设(不同于stackoverflow规则“避免你的答案与问题一起提供,你希望得到更多答案”):
答案 0 :(得分:3)
Hexadecimal不是二元的。
在十六进制中,每个字符(ASCII编码的字节/八位字节)可以表示16个值:0-9和A-F。它需要两个十六进制字符来表示256个值。
在“二进制文件”中,每个字节(八位字节)可以表示256个值。
现在,使用二进制文件的关键在于它是“最原始”的格式,并且不需要以任何方式将其自身用于人类消费。这大大增加了文件的数据/八位字节比。
二进制格式可以帮助“IP”,但这不一定是主要目标。粉丝编写了大量的编辑工具(如证据所示),以及不时的官方工具。
二进制文件结构可以在偏移中确定,并且可以直接搜索而不需要像文本文件一样“读取到行X和列Y”。这使得资源的随机访问更加有效。对于许多Baulder的Gate文件,许多都采用“固定格式”,并且可以简单(快速)加载到相同布局的内存结构中。 (有时堆和其他数据结构将直接编码在二进制文件中。)
二进制文件是数据的 opaque 结构:它只是结束的手段。内部的信息仅用于在特定方案中访问。 (将其与JSON或SQL数据库进行比较;前者不是不透明的,因为它是“人类消费品”而后者仅暴露信息。)
查看不同的种二进制文件以及每个文件提供的服务:音频?图片?路线?实体位置和统计数据?对话?每一个都是根据发动机的特定需求精心设计的,虽然有些“可以做得不同”,但如果没有必要并且现有的工具已经到位:为什么要改变?
答案 1 :(得分:0)
更紧凑,不需要字符串解析。例如存储数字'123',你将需要一个字节。要存储字符串“123”,您将需要三个字节,并且长度至少需要一个字节。如果有人认为今天我们不需要考虑空间,那么他/她就不应该编写代码。这使得好的和坏的应用程序之间存在差异。