bad*_*mad 1 c bit-packing bit-fields
在以下2个结构中,
typedef struct _a {
short a1:13 __attribute__((packed));
char a2[4] __attribute__((packed));
} a;
typedef struct _b {
short b1:10 __attribute__((packed));
short b2:10 __attribute__((packed));
short b3:12 __attribute__((packed));
} b;
Run Code Online (Sandbox Code Playgroud)
在struct b,我发现b2的位用b1打包,b3的位用b2打包.它最终导致4字节值.
我期待类似的行为,struct a但我看不出相同.前2个字节用a1(未使用的5位)占用,后跟4个字节用于a2.
这种行为有望吗?为什么我不能将char [4]与短片一起包装:13?有没有办法实现它?
a2不是一个位字段,所以它永远不会被放在一起a1.标准说
存储在任何其他对象类型的非位字段对象值由n个×CHAR_BIT位,其中n是该类型的对象的大小,以字节为单位.可以将该值复制到unsigned char [n]类型的对象中(例如,通过memcpy); 生成的字节集称为值的对象表示.
因此,这样的子对象必须是可寻址的单元,并且该规则没有例外.