Windows到iPhone的二进制文件

时间:2011-09-17 02:39:04

标签: c++ serialization portability

将二进制文件从Windows传递到iPhone是否安全,如下所示:

std::ostream stream = // get it somehow
stream.write(&MyHugePODStruct, sizeof(MyHugePODStruct));

,如下所示:

std::istream stream = // get it somehow
stream.read(&MyHugePODStruct, sizeof(MyHugePODStruct));

虽然MyHugePODStruct的定义是一样的吗?如果没有有任何方法可以使用标准库(包括c ++ 11)或安全升级来序列化这个?是否有更干净的方式,因为它似乎是一个不可移植的代码?

1 个答案:

答案 0 :(得分:1)

不,原因很多。首先,这不会编译,因为您必须将char *传递给readwrite。其次,这并不保证甚至可以在单个平台上工作,因为结构可能包含填充(但是在代码的不同编译版本之间,即使在同一平台上,它们本身也可能不同)。接下来,需要考虑的64/32位问题会影响许多基本类型(例如,long double在x86上填充为12个字节,但在x64上填充为16个字节)。最后但并非最不重要的是有字节序(虽然我不确定iOS字节序是什么)。

所以简而言之,不,不要那样做。

您必须单独序列化每个struct成员,并根据其数据类型。

你可能想查看Boost.serialization,虽然我没有经验。