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)
这样对吗?任何人都可以提供替代设计吗?我没有收到回电,所以我只是想了解我可以改进的地方。
这样对吗?
最有可能的,没有。
序列化的重点是将数据转换为完全独立于平台的形式——例如,不依赖于字节顺序之类的东西,或者 afloat是否是 IEEE 754 或非常不同的东西。这需要:
a) 对预期格式的严格协议——例如,如果它是某种文本(XML、JSON、CSV 等),或者它是“原始二进制”,并明确定义了每个单独字节的含义(例如,可能是“字节” 1 总是有效数的最低 8 位")。
b)正确转换为任何预期格式(例如,可能确保字节 1 始终是有效数的最低 8 位,而不管任何/所有平台差异)
然而; 至少从技术上讲,代码不应该是可移植的,并且规范(“预期格式的协议”)恰好与您最终为代码设计的唯一平台匹配;因此,代码正确至少在技术上是可能的。
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |