【发布时间】:2015-12-12 00:48:26
【问题描述】:
在 C 中,我习惯于使用 char*,我将一些表示网络数据包的结构映射到它。然后我只需分配数据包参数并通过网络发送:
已更新 - 我忘记补充说我有一些有效载荷
struct packet {
uint64_t id __attribute__((packed));
uint64_t something __attribute__((packed));
short flags __attribute__((packed));
// here follows payload with variable length
};
...
char *payload = get_payload();
size_t payload_size = get_payload_size();//doesnt matter how
char *data = malloc(sizeof(struct packet)+payload_size);
struct packet *pkt = (struct packet *)data;
pkt->id = 123;
pkt->something = get_something();
pkt->flags = FLAG | FLAG2;
memcpy(data+sizeof(struct packet), payload, payload_size);
send(data, sizeof(struct packet)+payload_size);
现在我想用一些不错的 C++ 特性来实现它(如果有任何可以更好地做到这一点的话) 我可以在 C++ 中做的最好的改变是使用 new 而不是 malloc。
char *data = new char[sizeof(struct packet)];//rest is same
好的,这称为对象序列化。我发现几个示例总是使用我无法使用的 boost。C++ 中没有本地方式来完成这个吗?
【问题讨论】:
-
您所问的通常称为“对象序列化”。尝试使用谷歌搜索或搜索“C++ 对象序列化”的 SO。
标签: c++ networking struct