将数组值 1 和 0 转换为二进制

Convert array values of 1's and 0's to binary

本文关键字:转换 二进制 数组      更新时间:2023-10-16

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

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

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

然后您需要将其初始化为 0。(这很重要,因为|=需要变量具有某个定义的值)。

unsigned char bin;

现在,unsigned char保证有 1 个字节,而不是 8 位。所以你应该使用类似的东西uint8_t如果它可用。

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

for(int i = 0; i < 8; ++i) {
bin |= (InputValues[i] << i);
}

我改变了两件事。

  1. 我用|=而不是&=.这是按位 OR 运算符。您需要使用 OR,因为它只在 LHS 中设置正确的位,而其他位保持不变。AND 不一定会设置该位,并且还会屏蔽(设置为 0)其他位。
  2. 使用<< i将数组中的位移动到相应的位置。