сеть — C ++ десериализует распакованную структуру C

В нашем проекте отправитель — устаревший неизменяемый — код C, сериализующий C struct следующим образом. Обратите внимание 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);

}

Есть ли другой лучший способ?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]