[英]Convert binary signal to int number
我正在嘗試將樹莓派的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為1,否則為0。依此類推。
我現在的問題是,是否有更優雅的方法可以做到這一點。
只需將“位”“移”到數字中的適當位置即可:
unsigned int number = 0;
for (int i=0; i<5; i++)
{
number |= a[i] << i;
}
萬一digitalRead
只返回0
或1
這將起作用。 如果它返回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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.