二进制要找到什么类型的序列化
Binary de-how to find, what type of serialization is it?
我有一个由程序生成的.DAT文件。程序所有者不反对解析和编辑此文件,但他不会给任何人答案。
文件主要由以这种方式定义的变量组成:
在大多数情况下:
(4 bytes - length of the var name)(var name)(4 bytes of some internal var type)(4 bytes - possibly are elements count)(X bytes of var value)
很少:
(4 bytes - length of the var name)(var name)(1 zero byte)(4 bytes of some internal var type)
所以,例如:
([4 0 0 0][name])[11 0 0 0][1 0 0 0]([9 0 0 0][Alexander])
和
([8 0 0 0][names])[6 0 0 0](length [3 0 0 0])([4 0 0 0][John])([4 0 0 0][Anne])([7 0 0 0][SomeGuy])
我试图查看boost二进制序列化,但它不会在文件中添加变量名,我认为使用8个字节,而不是4个字节。
没有通用方法来确定"哪种类型的序列化"。该格式的作者做出了设计决策,并达到了最终格式。实际上可能是任何事情。您可以做出有根据的猜测("反向工程"(,但是肯定要知道的唯一方法是从作者那里获得规范。尽管您声称他不介意人们操纵以这种格式存储的文件,但他拒绝提供上述规范会让我怀疑这是否真的是真的,最终意味着您可能必须坚持猜测。
要添加边界点的答案,没有必要框架(我知道(可以处理"任何"格式。该格式必须由库知道和实施。因此,您需要自己实施。
相关文章:
- 大多数基本类型的高效二进制序列化
- 增强序列化,按基类型加载存档类会产生错误的数据
- 二进制要找到什么类型的序列化
- Boost:当缺少类型时,如何通过基指针序列化/反序列化泛型类型集合
- 使用ProtoBuf序列化类型System.Drawing.Rectangle从.NET到C
- 将供应序列化改为动态类型
- 提高不透明类型的序列化
- 如何从 QDataStream 中读取多个相同类型的序列化对象
- 序列化多态类型的常见混淆
- 反序列化没有默认构造函数的 STL 容器类型
- 将序列化保存到多种存档类型,并防止在使用指针加载时构造新对象
- 将序列化的Java Double转换为等效的VC++类型
- 提升序列化提供未定义的类型'boost::STATIC_ASSERTION_FAILURE'
- boost序列化错误C4308:负整数常量转换为无符号类型
- 使用谷物在库中序列化模板化的多态性类型
- 可从任何序列类型初始化的c++类
- Boost动态序列化所有派生类型
- 最语义正确和类型安全的构造从序列化字节数组?(c++ 11)
- Boost序列化:读取不同类型的数据
- 如何使用boost序列化shared_ptr指针类型的列表