'有以下问题:我有一个多字节和单字节数据类型的输入流,只是想把它放在结构上。不幸的是,如果我将一个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位构件的确切顺序解析strea m到预定义的结构中。有没有办法强制这个?在一台64位机器上工作,试图用-m32
gcc标志编译。
我知道它与结构等填充有关。但是有没有解决方法仍然可以实现固定的结构尺寸?
在此先感谢!
我认为你正在寻找“结构填充”和“对齐”这两个字。这可能会帮助你找到你要找的东西。 – templatetypedef
[为什么不是一个结构的sizeof等于每个成员的sizeof总和?](https://stackoverflow.com/q/119123/995714) –
只需编写代码即可完成您所需的任务。如果你关心结构的大小,你做错了什么。 –