Obtengo una transmisión a través de la red que es una matriz de caracteres/bytes. Contiene un encabezado y algunos datos. Me gustaría asignar el encabezado a una estructura. Aquí hay un ejemplo:Deserializar una matriz de bytes a una estructura
#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;
}
¿Funcionará esto siempre suponiendo que la estructura nunca contenga ningún campo de longitud variable? ¿Hay una plataforma independiente/idiomática para hacer esto?
Nota:
he visto bastantes bibliotecas en Internet que le permiten serializar/deserializar, pero me da la impresión de que sólo pueden deserializar algo si ha ben previamente serializado con la misma biblioteca . Bueno, no tengo control sobre el formato de la transmisión. Definitivamente voy a obtener una matriz byte/char donde todos los valores se siguen unos a otros.
Acerca de iterar sobre campos struct: ¿Tiene que usar una estructura? Estoy preguntando porque reemplazarlo por una tupla permitiría la iteración de los campos. –