簡體   English   中英

將二進制信號轉換為整數

[英]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只返回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

您可以通過按位操作來做到這一點:

result = array[4]<<4 | array[3]<<3 | array[2]<<2 | array[1]<<1 | array[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM