比特打包结构中的数组

mha*_*enb 4 c gcc bit-packing

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

struct example_s {
  // ...
  unsigned int flags[32] : 32;
} __attribute__((__packed__));
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*ams 7

如果你只是将它放入一个(32位)int,那么你可以使用for循环干净地迭代这些位,如下所示:

for (bit = 0; bit < 32; bit++)
    flagValue = ((flags & (1<<bit)) != 0;
Run Code Online (Sandbox Code Playgroud)

写入比数组索引语法难得多.

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