2017-07-17 2 views
0

J'essaie de convertir un int en un tableau de 4 bits, de sorte que je peux les sortir en utilisant les GPIO d'un pi de framboise. Je programmation en C. Ma fonction actuelle est:Convertir int en octet pour 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; 
} 

Le problème est que le signal du tableau n'est pas calculé correctement.

+1

Je ne vois vraiment pas le point d'utiliser récursion dans 'binaryToAbits()'. Une simple boucle 'for()' aurait été beaucoup plus simple, et probablement beaucoup plus rapide aussi. Dans tous les cas, vous pouvez essayer d'adapter les réponses à [cette question] (https://stackoverflow.com/q/111928/1679849). –

+0

Vous devriez vraiment essayer de produire un exemple minimal, complet et vérifiable (https://stackoverflow.com/help/mcve). Surtout, vous devriez inclure une explication sur le résultat que vous attendez (et éventuellement aussi ce que vous obtenez réellement). Mon test de votre 'binaryToAbits' donne des résultats raisonnables - pourtant vous avez indiqué que cette fonction se comporte mal. – skyking

+0

Pouvez-vous donner un exemple de ce à quoi ressemble votre entrée et à quoi vous voulez que votre sortie ressemble? – Fabien

Répondre

3

L'utilisation récursion rend plus compliquée que nécessaire.

Vous pouvez simplement faire:

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'; 
}