我想在一个位打包的结构中有一个数组.我静态地知道数组的大小(32),我希望数组中的每个元素都是一个位.例如,我希望能够说出类似的话:
struct example_s { // ... unsigned int flags[32] : 32; } __attribute__((__packed__));
我尝试了几件事,但是gcc不会让步.能够这样做是很好的,这样我就可以编写遍历打包数组中元素的干净代码.想法?
解决方法
如果你只是将它放入一个(32位)int,那么你可以使用for循环干净地迭代这些位,如下所示:
for (bit = 0; bit < 32; bit++) flagValue = ((flags & (1<<bit)) != 0;
写入比数组索引语法难得多.
如果您希望隐藏位错误以使代码更具可读性,您甚至可以使用函数或宏来访问位 – 例如GetFlag(位)