二进制反序列化 - 如何查找,它是什么类型的序列化?

时间:2017-04-18 18:28:42

标签: c++ serialization deserialization

我有一个程序生成的.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个。

2 个答案:

答案 0 :(得分:2)

没有通用的方法来确定"什么类型的序列化"它是。该格式的作者已做出设计决定并达成最终格式。它几乎可以是任何东西。您可以进行有根据的猜测("逆向工程")但唯一可以确定的方法是从作者那里获得规范。虽然你声称他并不介意人们操纵以这种格式存储的文件,但他拒绝提供上述规范让我想知道这是否真的如此,最终意味着你可能不得不坚持猜测。

答案 1 :(得分:0)

要添加BoundaryImposition的答案,没有可以处理"任何"的反序列化框架(我知道)。格式。该格式必须由库知道并实现。所以你需要自己实现它。