Serialization 文件中的二进制差异导致无法使用的反序列化对象

Serialization 文件中的二进制差异导致无法使用的反序列化对象,serialization,boost,unicode,Serialization,Boost,Unicode,我有一个问题,很难解释。我有boost序列化对象,我需要创建相同的对象。第一个对象是在不同的机器上创建的(但具有相同的体系结构)。 序列化/反序列化的代码未更改 新对象本身是正常序列化的。它们两个通常也是反序列化的。 对象的大小完全相同。最多在内容上是一样的 这些对象是一组unicode UTF8字符串(带有一些附加信息) 但是,旧的目标程序运行正常,而新的目标程序运行不正常 两个序列化文件的二进制差异示例: 任何建议都很好。二进制序列化档案实际上还不是可移植的。请看这里: 这可能包括跨库版本

我有一个问题,很难解释。我有boost序列化对象,我需要创建相同的对象。第一个对象是在不同的机器上创建的(但具有相同的体系结构)。 序列化/反序列化的代码未更改

新对象本身是正常序列化的。它们两个通常也是反序列化的。 对象的大小完全相同。最多在内容上是一样的

这些对象是一组unicode UTF8字符串(带有一些附加信息)

但是,旧的目标程序运行正常,而新的目标程序运行不正常

两个序列化文件的二进制差异示例:


任何建议都很好。

二进制序列化档案实际上还不是可移植的。请看这里:

这可能包括跨库版本甚至构建的序列化(因为不同的编译器选项可能导致不同的输出)

我建议看一下EOS可移植归档的实现

可在许可证下使用。这保证了实现一种真正可移植的序列化归档格式(有一些文档化的限制)

我希望您不需要转换,但如果需要,您可以随时将旧档案转换为文本格式档案。这至少应该为您提供一个“中间地带”表示法,该表示法适用于程序的所有版本。如果文本存档无法控制文件大小。

我发现了问题(感谢我的同事):问题是第一个文件是用gcc标志“-funsigned char”编译的程序序列化的,第二个文件是用没有它编译的程序序列化的。同步此标志时,输出相同