C方式序列化邮件?
发布时间:2020-12-16 10:30:22 所属栏目:百科 来源:网络整理
导读:在我目前的项目中,我有一些不同的接口,要求我将消息序列化为字节缓冲区.我觉得我可能不会这样做会让一个真正的C程序员开心(我想). 我通常会这样做: struct MyStruct { uint32_t x; uint64_t y; uint8_t z[80];};uint8_t* serialize(const MyStruct s) { uin
在我目前的项目中,我有一些不同的接口,要求我将消息序列化为字节缓冲区.我觉得我可能不会这样做会让一个真正的C程序员开心(我想).
我通常会这样做: struct MyStruct { uint32_t x; uint64_t y; uint8_t z[80]; }; uint8_t* serialize(const MyStruct& s) { uint8_t* buffer = new uint8_t[sizeof(s)]; uint8_t* temp = buffer; memcpy(temp,&s.x,sizeof(s.x)); temp += sizeof(s.x); //would also have put in network byte order... ... etc ... return buffer; } 请原谅任何错别字,这只是我头脑中的一个例子.如果我正在序列化的结构有内部指针,显然它会变得更复杂. 所以,我有两个密切相关的问题: >上面的特定场景中是否存在任何问题,通过将结构直接转换为char缓冲区进行序列化,假设我知道目标系统具有相同的字节顺序? 如果您可以使用标准C / STL更好地序列化此结构,而不添加库,那么编辑奖励积分. 解决方法
您可能想看看Google
Protocol Buffers(也称为protobuf).您可以使用语言中性IDL定义数据,然后通过生成器运行它以生成C类.它会处理字节排序问题,并且可以提供非常紧凑的二进制形式.
通过使用它,您不仅可以保存C数据,而且可以在其他语言(C#,Java,Python等)中使用,因为有可用的protobuf实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |