C++ 将二进制数据强制转换到结构后出现错误数据

C++ 将二进制数据强制转换到结构后出现错误数据,c++,pointers,struct,C++,Pointers,Struct,我尝试将二进制数据转换为结构: struct stats { unsigned char stats_id; unsigned short stats_length; unsigned char stats_records; }; stats *p = (stats*)data; //data - char pointer to char buffer with binary data 但我得到了错误的结果: 因为我需要这个: 如果我这样做,我就能得到它: uns

我尝试将二进制数据转换为结构:

struct stats {
    unsigned char stats_id;
    unsigned short stats_length;
    unsigned char stats_records;
};

stats *p = (stats*)data; //data - char pointer to char buffer with binary data
但我得到了错误的结果:

因为我需要这个:

如果我这样做,我就能得到它:

unsigned char stats_id = *(data);
unsigned short stats_length = *(data+1);
unsigned char stats_records = *(data+3);

我有很多相同的数据,我认为转换为结构是更好的方法,所以我不想使用上面的变体(或者我可以进行验证,但无论如何我想知道这个问题的解决方案)。其他结构的铸造效果很好,所以这个scructure是错误的。起初,我认为原因在于该结构的对齐,但使用pragma的测试给出了相同的结果。

似乎是对齐/填充问题,更具体地说是对齐
stats\u length
。您说您尝试了
#pragma pack(1)
(或编译器的等效版本)?这是一个结构打包问题。去阅读这个指南:它将帮助你了解你看到的。@ Borgleader,现在我尝试使用“γ”PrimaPACK(1),它的工作,但在我尝试围绕结构“<代码>”PracePARMA包(PUP,1)< /C>和“Apple PrimaMax包(POP)”在我的Visual C++ 2010,而这不是。使用
#pragma pack(1)
后如何返回到以前的状态?我必须用什么来代替呢?布拉格音乐包(流行音乐)还是没问题?