我需要以以下形式处理一些数据:

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/

10-10 00:22
查看更多