Problème valeur chaîne de caractères
Résolu
M-a-t-h
-
M-a-t-h Messages postés 129 Statut Membre -
M-a-t-h Messages postés 129 Statut Membre -
Bonsoir.
Je dois réaliser une fonction en langage C permettant de convertir un nombre binaire en décimal (base 10).
Voici ce que j'ai tapé:
int bin2dec(binaire b)
{int i, somme;
i=0; somme=0;
while(b[i]!='\0')
{somme=somme*2+b[i];
i++;}
return somme;}
(en sachant que le type "binaire" est constitué d'une chaîne de caractères et qu'elle est correctement initialisée)
Mais apparemment je dois commettre une faute d'écriture car je n'obtiens pas ce que je désire: après des tests, j'en ai conclu que ce serait au niveau de "somme*2+b[i]" car lorsque i=0, au lieu d'obtenir 1 ou 0 avant que la boucle "redémarre", j'obtiens "49" si b[i]=1 et "48" si b[i]=0...
Qu'est-ce qui cloche?
Je dois réaliser une fonction en langage C permettant de convertir un nombre binaire en décimal (base 10).
Voici ce que j'ai tapé:
int bin2dec(binaire b)
{int i, somme;
i=0; somme=0;
while(b[i]!='\0')
{somme=somme*2+b[i];
i++;}
return somme;}
(en sachant que le type "binaire" est constitué d'une chaîne de caractères et qu'elle est correctement initialisée)
Mais apparemment je dois commettre une faute d'écriture car je n'obtiens pas ce que je désire: après des tests, j'en ai conclu que ce serait au niveau de "somme*2+b[i]" car lorsque i=0, au lieu d'obtenir 1 ou 0 avant que la boucle "redémarre", j'obtiens "49" si b[i]=1 et "48" si b[i]=0...
Qu'est-ce qui cloche?
3 réponses
-
Bonsoir,
somme = somme * 2 + b[i]
int + char...
Il y a une conversion implicite entre int et char. Le code ASCII de 0 étant 48, et celui de 1 étant 49, je pense que tu vois ce qui colle pas maintenant. ;) -
Pour "convertir" du char au int, tu peux utiliser tout simplemente la soustraction. Par exemple b[i] - '0'
Cdlt, -
Merci à vous deux!
Je me doutais que c'était un problème de type et sur le moment j'y ai remédié en soustrayant 48 à "somme" (ce qui revient effectivement à soustraire '0'), je pensais qu'il y avait une autre possibilité moins "triviale"...