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

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

我已经尝试了几件事,但是海湾合作委员会不会让人感到不安。能够执行此操作会很高兴,以便我可以编写在包装阵列中的元素上迭代的干净代码。想法?

有帮助吗?

解决方案

如果您简单地将其放入(32位)int中,那么您可以用这样的循环清洁迭代零件:

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

比数组索引语法更难编写。

如果您想隐藏一些偏斜以使代码更易读,甚至可以使用函数或宏来访问位 - 例如 GetFlag(bit)

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top