Я получаю передачу по сети в виде массива символов / байтов. Он содержит заголовок и некоторые данные. Я хотел бы сопоставить заголовок со структурой. Вот пример:
#pragma pack(1)
struct Header
{
unsigned short bodyLength;
int msgID;
unsigned short someOtherValue;
unsigned short protocolVersion;
};
int main()
{
boost::array<char, 128> msgBuffer;
Header header;
for(int x = 0; x < sizeof(Header); x++)
msgBuffer[x] = 0x01; // assign some values
memcpy(&header, msgBuffer.data(), sizeof(Header));
system("PAUSE");
return 0;
}
Всегда ли это будет работать, если структура никогда не содержит полей переменной длины? Есть ли независимый от платформы / идиоматический способ сделать это?
Примечание.
Я видел довольно много библиотек в Интернете, которые позволяют вам сериализовать / десериализовать, но у меня сложилось впечатление, что они могут десериализовать что-то только в том случае, если оно было ранее сериализовано с той же библиотекой. Ну, я не контролирую формат передачи. Я определенно собираюсь получить массив байтов / символов, в котором все значения просто следуют друг за другом.