在以下两个结构中,
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;
在
struct b
中,我发现b2的位用b1填充,b3的位用b2填充最终得到4字节的值。我本以为
struct a
会有类似的行为,但我不这么认为前2个字节被a1(未使用的5位)占用,后4个字节被a2占用。这种行为是预期的吗?为什么我不能把char[4]和short:13一起打包呢?有办法实现吗?
最佳答案
(时间太长,无法发表评论,因此我将其作为回答)
若要将所有字段打包在一起,必须将数组替换为4个字段:
typedef struct _a {
short a1:13 __attribute__((packed));
char a2_0:8 __attribute__((packed));
char a2_1:8 __attribute__((packed));
char a2_2:8 __attribute__((packed));
char a2_3:8 __attribute__((packed));
} a;