比特打包结构中的数组

时间:2010-11-28 21:57:30

标签: c gcc bit-packing

我想在一个位打包的结构中有一个数组。我静态地知道数组的大小(32),我希望数组中的每个元素都是一个位。例如,我希望能够说出类似的内容:

struct example_s {
  // ...
  unsigned int flags[32] : 32;
} __attribute__((__packed__));

我尝试了几件事,但gcc不会让步。能够这样做是很好的,这样我就可以编写遍历打包数组中元素的干净代码。想法?

2 个答案:

答案 0 :(得分:7)

如果你只是把它放到一个(32位)int中,那么你可以用这样的for循环干净地迭代这些位:

for (bit = 0; bit < 32; bit++)
    flagValue = ((flags & (1<<bit)) != 0;

写入数据索引语法并不困难。

如果您希望隐藏位错误以使代码更具可读性,您甚至可以使用函数或宏来访问位 - 例如GetFlag(bit)

答案 1 :(得分:1)

Bitfield成员元素没有地址,因此即使您可以声明它们的数组,也无法使用它(C中的所有数组访问都是指针算术和解除引用)。使用更大类型的位来编写自己的位数组很容易;杰森解释了基础知识。一般来说,除非你有充分的理由,否则你应该避免使用位域。他们通常比他们的价值更麻烦。

相关问题