0

在我们的项目中,发送者 - legacy unchangeable - C code,struct以下列方式序列化 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);

接收者

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

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

下面的好吗?

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);

}

还有其他更好的方法吗?

4

0 回答 0