我收到了一个由字符/字节组成的网络传输。它包含一个头部和一些数据。我想将头部映射到一个结构体上。以下是一个示例:
#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;
}
这个方法是否总是有效,假设结构体中从不包含任何可变长度字段?有没有跨平台/惯用的方法来实现这一点?
注意:
我在互联网上看到了很多库,可以让你进行序列化/反序列化,但我认为它们只能反序列化先前使用相同库序列化的内容。好吧,我对传输格式没有控制权。我肯定会得到一个字节数组/字符数组,其中所有值都紧随其后。