c - 位压缩结构中的数组

标签 c gcc bit-packing

我想要一个位压缩结构中的数组。我静态地知道数组的大小 (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(位)

关于c - 位压缩结构中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299338/

相关文章:

c++ - 模板类继承问题

Linux:从可执行文件更新嵌入式资源

python - 如何使用 numba 优化 numpy.packbits?

C 指针工作(但不像我预期的那样)

c++ - 创建基本的 OpenGL 上下文

c++ - 使用 SSE 进行比较和提取

c++ - __attribute((const)) 的不一致 gcc 行为

c++ - 打包位域时 VC++ 在做什么?

c++ - 结构位打包和 LSB/MSB 歧义 C++

c - 如何将 UTF-8 字符串转换为大写?