【发布时间】:2014-10-31 05:27:55
【问题描述】:
我在 C 中有一个 8 位的标志,我想使用如下的位域逐位访问它:
#include <stdio.h>
#include <stdint.h>
int main(void) {
struct flags{
uint8_t bits1:1;
uint8_t bits2:1;
uint8_t bits3:1;
uint8_t bits4:1;
uint8_t bits5:1;
uint8_t bits6:1;
uint8_t bits7:1;
uint8_t bits8:1;
};
struct flags *my_flags;
uint8_t x=6,i;
my_flags=(struct flags *)&x;
printf("%u\t",my_flags->bits5);
printf("%u\t",my_flags->bits6);
printf("%u\t",my_flags->bits7);
printf("%u\t",my_flags->bits8);
printf("%u\t",my_flags->bits1);
printf("%u\t",my_flags->bits2);
printf("%u\t",my_flags->bits3);
printf("%u\t",my_flags->bits4);
return 0;
}
我得到了预期的输出:0 0 0 0 0 1 1 0。
但这有点编码太多了。
- 难道没有类似位域数组或任何其他解决方法吗? (或)
- 在 C
my_flags->bits_i中是否有类似的东西,其中i将成为循环中的计数器?
我知道默认情况下两者都不存在于 C 中。但是有没有其他方法可以达到同样的效果?
【问题讨论】:
标签: c bit-fields