我有一个包含3位字段的结构。
struct A {
unsigned char a:3;
};
我希望有一个struct A
数组,每个元素只占3位而不是整个字节。
无论如何都要这样做?
答案 0 :(得分:3)
最好的方法是在每个结构中存储24位,然后在每个结构中有8 x 3位实体。您可以使用按位操作来访问结构中的3位的每个实体:
struct A {
unsigned char a[3];
};
然后,当您创建数组等时,您没有浪费的空间。但是,您将浪费任何未使用的3位实体,最多7个实体,最小可能为0(无浪费)。
答案 1 :(得分:1)
不,这是不可能的。 a
需要3位,但A
至少需要sizeof(char)。
顺便说一句,这正是为什么你可以将位字段作为结构成员,但不能有位变量 - 比如说,函数局部变量。最小可寻址单位是一个字节。