2017-07-17 111 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'; 
}