0

我正在尝试将树莓派的 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;

要将数组的内容转换为数字,我会使用 if 条件来查看第一个输入是 1 还是 0。如果它的 1 我是 1,否则为 0。依此类推...。

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

4

2 回答 2

2

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

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

这将在digitalRead返回01仅返回的情况下起作用。如果它返回0或一个non-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

于 2017-05-12T14:05:40.690 回答
0

你可以用按位运算来做到这一点:

result = array[4]<<4 | array[3]<<3 | array[2]<<2 | array[1]<<1 | array[0]
于 2017-05-12T14:06:08.070 回答