8位不均匀成员的结构大小不均匀

时间:2017-10-09 02:30:05

标签: c struct 8-bit

晚上好!

'遇到了以下问题:我有一个多字节和单字节数据类型的输入流,只想将它放在一个结构上。不幸的是,如果我在一个结构中加入了不均匀的8位成员和16位成员,sizeof()函数将给我一个均匀的长度。

以下示例:

数据类型:

struct uuu { // should contain 5 bytes
    uint8_t a[1];
    uint8_t b[1];
    uint16_t c;
    char d[1];
};
struct ccc { // should contain 5 bytes
    char a;
    char b;
    char c;
    uint16_t d;
};
struct bbb { // should contain 3 bytes
    char a;
    char b;
    char c;
};

段:

printf("char_bit: %d\n", CHAR_BIT);
printf("%d | %d | %d", sizeof(uuu), sizeof(ccc), sizeof(bbb));

结果:

char_bit: 8
6 | 6 | 3

关键是,我需要一个8位成员的确切顺序来将流解析为预定义的结构。有没有办法强迫这个?在64位计算机上工作,尝试使用-m32 gcc标志进行编译。

我知道它与struct等的填充有关。但是还有一种解决办法仍然可以实现固定的结构尺寸吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果使用packed属性,则结构将不包含填充。

struct __attribute__((packed)) uuu { // will now contain 5 bytes