如何在C++中序列化结构数据?

sho*_*int -1 c++ serialization

我在一次采访中被要求序列化数据(因此它可以存储在缓冲区中并通过某个网络发送)。这就是我想出的-

struct AMG_ANGLES {
    float yaw;
    float pitch;
    float roll;
};

char b[sizeof(struct AMG_ANGLES)];

char* encode(struct AMG_ANGLES *a)
{

    std::memcpy(b, &a, sizeof(struct AMG_ANGLES));
    return b;
}

void decode(char* data)
{
 // check endianess   
    AMG_ANGLES *tmp; //Re-make the struct
    std::memcpy(&tmp, data, sizeof(tmp));
}
Run Code Online (Sandbox Code Playgroud)

这样对吗?任何人都可以提供替代设计吗?我没有收到回电,所以我只是想了解我可以改进的地方。

Bre*_*dan 6

这样对吗?

最有可能的,没有。

序列化的重点是将数据转换为完全独立于平台的形式——例如,不依赖于字节顺序之类的东西,或者 afloat是否是 IEEE 754 或非常不同的东西。这需要:

a) 对预期格式的严格协议——例如,如果它是某种文本(XML、JSON、CSV 等),或者它是“原始二进制”,并明确定义了每个单独字节的含义(例如,可能是“字节” 1 总是有效数的最低 8 位")。

b)正确转换为任何预期格式(例如,可能确保字节 1 始终是有效数的最低 8 位,而不管任何/所有平台差异)

然而; 至少从技术上讲,代码不应该是可移植的,并且规范(“预期格式的协议”)恰好与您最终为代码设计的唯一平台匹配;因此,代码正确至少在技术上是可能的。