Langage C : BCD vers ASCII et inversement

Résolu/Fermé
Battoss - 26 nov. 2011 à 20:42
 Battoss - 26 nov. 2011 à 22:40
Bonjour,

Je recherche depuis plusieurs heures mais je n'ai pas trouver de réponses pour mon problème.

J'aimerai une fonction qui peut transformer du BCD vers de l'ASCII et une autre qui fait l'inverse, de l'ASCII vers du BCD.

Je m'explique plus en précision au cas ou je me soit mal exprimer.

J'aimerai une fonction qui reçoit par exemple 0x01 0x23 0x45 0x67 (donc de l'hexa) et qui me ressort "01234567" et une autre qui reçoit par exemple "76543210" et qui me ressort en hexa 0x76 0x54 0x32 0x10.

Je voulais savoir si quelqu'un a un algorithme pour ces fonctions, ou si quelqu'un peut au moins m'aiguiller, car je n'arrive pas a savoir par où commencer.

Merci beaucoup d'avance.
A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
26 nov. 2011 à 21:52
Bonjour,
Si c'est sous forme de chaîne "01234567" vous pouvez récupérer chaque caractère par exemple le "0" et lui retirer la valeur '0' ascii pour mettre en binaire le chiffre,
char *chaine="01234567",c;
c=chaine[0]-'0'; // ici c récupère la valeur 0 en binaire du premier caractère de la chaine
Ensuite vous pouvez les injecter dans un char ou plus précisément en utilisant le type uint8_t pour du 8bits

exemple :
#include <stdio.h>
#include <stdint.h>

uint8_t f(int a,int b)
{
uint8_t x=0;
x=a<<4; //x fait 8bits donc on le décale de 4bits pour ensuite
x+=b; //lui ajouter b
return x; // retourne les 8bits qui contient nos deux valeurs sur 4bits
}

int main(void)
{
uint8_t z=0;
z=f(4,1); //f "injecte" le chiffre 4 et 1 dans un uint8_t
printf("%#x",z); // affiche en hexa
return 0;
}

ça peut vous donner une idée ou deux
0
Coucou,
Merci beaucoup de m'avoir rep, grace a ton exemple, et en cherchant, j'ai réussi a trouvé, merci beaucoup ;)
0