结构填充与位字段

时间:2014-05-13 20:11:18

标签: c structure padding

我想制作一个36位的结构所以我尝试了下面的结构

#pragma pack(push, 1)
 struct{

    unsigned int a : 5;
    unsigned int b : 1;
    unsigned int c : 11;
    unsigned int d : 2;
    unsigned int e : 2;
    unsigned int f : 1;

    unsigned int g : 8;
   unsigned int h : 6;

}HDR;
#pragma pack(pop)

sizeof(HDR):5,8 * 5 = 40位,我尝试使用无符号短整数仍然是40位。

但我只想使用36位。

我有什么方法可以做到吗?

由于

2 个答案:

答案 0 :(得分:0)

对象的大小始终是sizeof(char)的倍数。在大多数平台上,char保留8位。要容纳36位,您需要一个大小等于5*sizeof(char)的对象,并获得40位。

您需要一个大小为5的对象来保存33 - 40位。

答案 1 :(得分:0)

许多机器的最小大小为8位,因此您无法以任何方式获得36位。总会有打包位将其转换为8位或16位或32位边界。