将二进制信号转换为int数

时间:2017-05-12 14:00:13

标签: c raspberry-pi gpio wiringpi

我正在尝试将覆盆子pi的GPIO输入转换为int。 所以我有五个数字输入,想要读取输入。一旦我得到了值,我将它们存储在一个数组中。接下来就是将数组的内容转换为int数。

所以这是我的代码:

int a = digitalRead(PIN_16);
int b = digitalRead(PIN_18);
int c = digitalRead(PIN_22);
int d = digitalRead(PIN_24);
int e = digitalRead(PIN_26);

int array[5];

array[0]=a;
array[1]=b;
array[2]=c;
array[3]=d;
array[4]=e;

要将数组的内容转换为数字,我会在条件下查看第一个输入是1还是0.如果是1 I 1,则为0.等等......等等。

我现在的问题是,如果有一种更优雅的方式来做到这一点。

1 个答案:

答案 0 :(得分:2)

将“移位”位移到数字中的适当位置:

unsigned int number = 0;
for (int i=0; i<5; i++)
{
    number |= a[i] << i;
} 

如果digitalRead仅返回01,这将有效。如果它返回0non-zero值,我们需要将其检查为零:

unsigned int number = 0;
for (int i=0; i<5; i++)
{
    number |= (a[i] != 0) << i;  //  (a[i] != 0) will have a value of `1` for any non-zero `a[i]`
} 

或甚至更惯用的伎俩:

number |= !!a[i] << i;  

这是一个双重逻辑否定。第一个会将任何非零变为0,第二个会将0变为1