【发布时间】:2012-03-27 07:24:56
【问题描述】:
我有一些文件已通过使用二进制 fstream 直接编写 C++ structs 进行序列化。现在,当我为相应的 C# 类生成读取方法时,我发现这些方法并不是真正的一对一映射,可能是因为结构打包。
所以我的问题是 - 处理这种情况的最佳方法是什么?我有 C++ 和 C# 源代码,所以我可以更改任何一部分。我应该尝试在不打包的情况下序列化 C++(我假设这是使用 #pragma pack(1) 完成的,对)还是以某种方式调整我的 C# 代码以考虑到这些差距?
还是反序列化的问题完全不同,与打包无关?
更新 1 我发现 C++ enums 有 4 个字节长,bool 值有 2 个字节长(谁知道?),但即使添加了 #pragma pack(1) 我也只能正确读取第一条记录。另外,我检查了sizeof(MyStructure) 的字节数,并且值匹配。这一定意味着记录之间有一些填充。
Update 2该死,在代码中发现了一个错误。复制粘贴错误。需要 PVS Studio 什么的。现在一切都好。 (是的,布尔值是 1 个字节大。)
【问题讨论】:
-
枚举不一定是 4 个字节,bool 不一定是 2 个字节。这取决于您的平台和编译器。 (我知道这在这里没有帮助,但我需要指出这一点,以免其他人从阅读本文中得到错误的想法)。
标签: c# c++ serialization struct packing