我想序列化/反序列化一些结构化数据,以便通过char* buffer
通过网络发送它。C++中的对象序列化
更确切地说,假设我有一个类型为struct Message
的消息。
struct Message {
Header header;
Address address;
size_t size; // size of data part
char* data;
} message
在C中,我会用一些诸如:
size = sizeof(Header) + sizeof(Address) + sizeof(size_t) + message.size;
memcpy(buffer, (char *) message, size);
序列化,并
Message m = (Message) buffer;
反序列化。
什么是“正确”的方式在C++中做到这一点。定义一个类而不是一个结构会更好吗?我应该超载一些操作员吗?是否有对齐问题需要考虑?
编辑:感谢指出“char *”的问题。提供的C版本不正确。应该单独复制data
字段指向的数据部分。
什么阻止你在C++中做同样的事情?除了你似乎没有序列化'data'字段,并且不考虑结构填充之类的事实。 – 2015-03-02 17:38:31
你不会直接通过C中的网络发送该结构。尝试一下,看看你是否没有垃圾或段错误。 (没有特别的安排,存储在'data'中的地址在创建它的过程之外没有任何意义。) – cHao 2015-03-02 17:39:42
“在C中,我会使用诸如......的东西”而且你会错误的。'sizeof(struct Message)'是可读的,可维护的*和*正确的。你的三个大小的总和既不是。 – 2015-03-02 17:40:09