2017-07-17 163 views
0

我試圖將int轉換爲4位數組,以便我可以使用樹莓派的GPIO輸出它們。我正在用C編程。我目前的功能是:將int轉換爲GPIO的字節

#include <stdio.h> 

char *binaryToAbits(unsigned int answer, char *result) { 
    if(answer>1) 
    { 
    result=binaryToAbits(answer-1,result); 
    } 
    *result='0'+(answer & 0x01); 
    return result+1; 
}; 

int main(void) { 
    unsigned int numToConvert=2; 
    char ascResult[]={0,0,0,0}; 
    int i; 
    *binaryToAbits(numToConvert,ascResult)='\0'; 

    for(i=0;i<4;i++) 
    { 
    if(ascResult[i]!='1') ascResult[i]='0'; 
    } 
    for(i=3;i>=0;i--) 
    { 
    printf("%c\n",ascResult[i]); 
    } 
    printf("\n"); 
    return 0; 
} 

問題是數組的信號計算不正確。

+1

我真的沒有看到)在'binaryToAbits使用遞歸的點('。一個簡單的'for()'循環會簡單得多,而且速度可能要快很多。無論如何,你可以嘗試修改[這個問題]的答案(https://stackoverflow.com/q/111928/1679849)。 –

+0

您應該嘗試生成一個最小,完整,可驗證的示例(https://stackoverflow.com/help/mcve)。特別是你應該包括你期望的結果(也可能是你實際得到的結果)的解釋。我對你的'binaryToAbits'的測試給出了合理的結果 - 但你已經指出這個函數的行爲是錯誤的。 – skyking

+0

你能提供一個你的輸入看起來像什麼樣的例子,你希望你的輸出看起來像什麼? – Fabien

回答

3

使用遞歸使它變得更加複雜。

你可以簡單地做:

void binaryToAbits(unsigned int input, char *result) 
{ 
    result[0] = (input & 0x1) ? '1' : '0'; 
    result[1] = (input & 0x2) ? '1' : '0'; 
    result[2] = (input & 0x4) ? '1' : '0'; 
    result[3] = (input & 0x8) ? '1' : '0'; 
}