将1' s和0&#39的数组值转换为二进制

时间:2018-02-28 06:25:08

标签: c++ arduino

在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];
}

1 个答案:

答案 0 :(得分:4)

如果我正确理解了您的要求,那么您有一个单独的位数组,您需要将其转换为具有相应位的字节。

首先,您应该将a声明为bin类型,而不是unsigned charchar[8]表示一个8字节的数组,而您只需要一个字节。

然后你需要将它初始化为0.(这很重要,因为char[8]需要变量有一些定义的值)。

|=

现在,unsigned char bin; 保证有1个字节但不是8个比特。所以你应该使用像unsigned char这样的东西。如果可用的话。

最后,您可以将uint8_t中的相应位设置为 -

bin

我改变了两件事。

  1. 我使用for(int i = 0; i < 8; ++i) { bin |= (InputValues[i] << i); } 代替|=。这是按位OR运算符。您需要使用OR,因为它只在LHS中设置正确的位并保持其他位不变。 AND不一定会设置该位,也会屏蔽掉(设置为0)其他位。
  2. 使用&=将数组中的位移至相应位置。