将数组的布尔值推送到 uint8 位域

Pushing boolean values of an array to uint8 bitfield

假设我有:

myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE}

uint8 mybitfield;

使用 0=FALSE1=TRUE

将这些值 "push" 到 uint8 位域的最有效方法是什么

这样mybitfield表示为:

[1,0,0,1,1,0,0,0] 

(不考虑最低有效位且始终为 0)。

谢谢!

由于 myArray 是某种通用整数类型,除了遍历数组中的所有项目之外别无他法,如果 TRUE 则将位 i 设置为 bitfield |= 1u << i;

如前所述,您必须逐个迭代各个位,例如:

int myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE};

uint8_t bitfield = 0;
for (int i = 0; i < 7; ++i) {
    bitfield |= myArray[i] ? 1 : 0;
    bitfield <<= 1;
}

这导致 0b10011000,即数组的最高有效位在前,最低有效位隐式为零。