将二进制信号转换为整数
Convert binary signal to int number
我正在尝试将 raspberry pi 的 GPIO 输入转换为 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。依此类推...。
我现在的问题是是否有更优雅的方法来做到这一点。
只需"shift"位放入数字中的适当位置:
unsigned int number = 0;
for (int i=0; i<5; i++)
{
number |= a[i] << i;
}
这将在 digitalRead
仅返回 0
或 1
的情况下起作用。如果它 returns 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
.
你可以用按位运算来完成:
result = array[4]<<4 | array[3]<<3 | array[2]<<2 | array[1]<<1 | array[0]
我正在尝试将 raspberry pi 的 GPIO 输入转换为 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。依此类推...。
我现在的问题是是否有更优雅的方法来做到这一点。
只需"shift"位放入数字中的适当位置:
unsigned int number = 0;
for (int i=0; i<5; i++)
{
number |= a[i] << i;
}
这将在 digitalRead
仅返回 0
或 1
的情况下起作用。如果它 returns 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
.
你可以用按位运算来完成:
result = array[4]<<4 | array[3]<<3 | array[2]<<2 | array[1]<<1 | array[0]