C++ 使用类型双关的POD结构序列化
我想找出一种将POD结构序列化为字节向量的方法。我的应用程序是序列化游戏中的一些游戏状态对象,以便将它们保存到文件中,并在某个时候使用反向过程再次检索它们 我正在使用C++ 使用类型双关的POD结构序列化,c++,serialization,struct,casting,type-punning,C++,Serialization,Struct,Casting,Type Punning,我想找出一种将POD结构序列化为字节向量的方法。我的应用程序是序列化游戏中的一些游戏状态对象,以便将它们保存到文件中,并在某个时候使用反向过程再次检索它们 我正在使用#pragma pack(1)强制对齐到1字节 要进行序列化,我只需将整个结构强制转换为void*,然后转换为unsigned char*,然后使用生成的指针使用make_unique初始化向量 我对C++比较陌生,我想知道做这些事情是否安全。以下是我最迫切的几个问题: 结构内存布局有保证吗 如果我强制打包到最接近的字节,是否保证结
#pragma pack(1)
强制对齐到1字节
要进行序列化,我只需将整个结构强制转换为void*
,然后转换为unsigned char*
,然后使用生成的指针使用make_unique
初始化向量
我对C++比较陌生,我想知道做这些事情是否安全。以下是我最迫切的几个问题:
无符号字符[]
强制转换回结构类型进行反序列化李>
下面的代码就是我所说的一个例子。跑进来
#包括
#包括
#包括
#布拉格语包(1)
结构体{
无符号字符a;
无符号整数b;
无符号整数c;
std::unique_ptr serialise()常量;
};
#pragma pack()
std::unique_ptr PODStruct::serialise()常量{
auto rawChar=(无符号字符*)((无效*)此字符);
auto-serDataPtr=std::make_unique(rawChar,rawChar+sizeof(PODStruct));
返回serDataPtr;
}
int main(){
PODStruct foo={0x38,0x34353637,0x30313233};
自动条=foo.serialise();
用于(自动字节:*条){
std::cout我会使用类似于boost序列化的东西。如果在同一台机器上使用,这将起作用。填充和对齐可能因不同的体系结构/编译器/版本而有所不同,并造成这种中断。与Reddit的评论相同:为什么你的序列化没有返回std::vector
?我会使用类似于boost serialization的东西n、 如果在同一台机器上使用,这将起作用。填充和对齐可能因不同的体系结构/编译器/版本而不同,并造成此中断。与Reddit上的注释相同:为什么您的序列化
不返回std::vector
?