我需要以以下形式处理一些数据:
typedef struct{
unsigned n1 : 12;
unsigned n2 : 12;
unsigned n3 : 12;
unsigned n4 : 1;
unsigned n5 : 35;
} data;
我确保它们总共有 9 个字节。
但他们没有......将该结构的 9 个字节写入文件并读取它并不会恢复所有数据,并且
sizeof(data)
返回 16。这里有什么问题?
最佳答案
问题是编译器出于效率原因添加了一些填充。
此行为可以被覆盖。
有关如何使用 gcc 执行此操作,请参阅 forcing alignment in GCC
有关如何使用 Visual C++ 执行此操作,请参阅:forcing alignment in Visual C++
关于C位域内存使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6142767/