C ++反序列化一个解压缩的C结构

时间:2017-04-10 21:22:36

标签: c++ networking htonl

在我们的项目中,发件人 - 遗产不可更改 - C代码,以下列方式序列化C Message struct。请注意struct Message { uint32_t field1 __attribute__ ((aligned (4))); uint16_t field2 __attribute__ ((aligned (2))); }; 已解压缩。

char *buf = getBuffer();
Message *m = (Message *)buf;
m->field1 = 0x11;
m->field2 = 0x22;

m->field1 = htonl(m->field1);
m->field2 = htons(m->field2);

发件人

void process (char *p)
{
    Message *m = (Message *)p;
    m->field1 = htonl(m->field1);
    m->field2 = htons(m->field2);
}

接收机

现在我们如何在接收器(C ++)上反序列化它。我明白以下是无效的?

void process (char *p)
{
   static std::aligned_storage<MAX_SIZE, std::max_align_t>::type buffer;
   Message *m = new ((void *)&buffer) Message;
   memcpy(m, p, sizeof(Message));
   m->field1 = htonl(m->field1);
   m->field2 = htons(m->field2);

}

以下是否可以?

Meteor.user()._id;

还有另一种更好的方式吗?

0 个答案:

没有答案