我想序列化/反序列化一些結構化數據,以便通過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