2017-07-17 20 views
0

intを4ビット配列に変換しようとしているので、ラズベリーpiの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'; 
} 
関連する問題