在Arduino IDE中,我将所有输入值放在一个数组中,如下所示:
int eOb1 = digitalRead(PrOb1);
int eLoop = digitalRead(PrLoop);
int eOb2 = digitalRead(PrOb2);
InputValues[0] = eOb1;
InputValues[1] = eLoop;
InputValues[2] = eOb2;
InputValues[3] = 0;
InputValues[4] = 0;
InputValues[5] = 0;
InputValues[6] = 0;
InputValues[7] = 0;
我想将其转换为类似的字节数组:00000111
你能告诉我吗?我尝试使用for循环遍历值,但它不起作用。
char bin[8];
for(int i = 0; i < 8; ++i) {
bin &= InputValues[i];
}
答案 0 :(得分:4)
如果我正确理解了您的要求,那么您有一个单独的位数组,您需要将其转换为具有相应位的字节。
首先,您应该将a
声明为bin
类型,而不是unsigned char
。 char[8]
表示一个8字节的数组,而您只需要一个字节。
然后你需要将它初始化为0.(这很重要,因为char[8]
需要变量有一些定义的值)。
|=
现在,unsigned char bin;
保证有1个字节但不是8个比特。所以你应该使用像unsigned char
这样的东西。如果可用的话。
最后,您可以将uint8_t
中的相应位设置为 -
bin
我改变了两件事。
for(int i = 0; i < 8; ++i) {
bin |= (InputValues[i] << i);
}
代替|=
。这是按位OR运算符。您需要使用OR,因为它只在LHS中设置正确的位并保持其他位不变。 AND不一定会设置该位,也会屏蔽掉(设置为0)其他位。 &=
将数组中的位移至相应位置。