我已声明此位字段。我想做的是获取二进制位域的整个值并将其转换为数组,以便我可以使用索引并寻址每个“ 1”值。
union{
struct shape{
uint8_t p0 : 1;
uint8_t p1 : 1;
uint8_t p2 : 1;
uint8_t p3 : 1;
uint8_t p4 : 1;
uint8_t p5 : 1;
uint8_t p6 : 1;
uint8_t p7 : 1;
};
uint8_t row;
}rows[8*2+4];
我想做的是导出位域,使其具有uint8_t tab = {0,1,1,0,0,1,1};这样的数组;
甚至有可能吗?有小费吗?在此先感谢
不是使用位字段,而是只使用uint8_t数组,并使用移位和掩码访问每个位。
uint8_t data[SIZE];
...
data[bitIndex >> 3] |= 1 << (bitIndex & 7); // set bit at bitIndex
data[bitIndex >> 3] &= ~(1 << (bitIndex & 7); // clear bit at bitIndex
bitValue = !!(data[bitIndex >> 3] & (1 << bitIndex & 7)); // read bit at bitIndex
使用较大的类型(16、32、64)可能更有效,但需要适当地更改移位和掩码(例如,uint16_t的值为4和15)。