Problème valeur chaîne de caractères

Résolu
M-a-t-h -  
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?


A voir également:

3 réponses

Groarh Messages postés 706 Statut Membre 185
 
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. ;)
1
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Pour "convertir" du char au int, tu peux utiliser tout simplemente la soustraction. Par exemple b[i] - '0'

Cdlt,
1
M-a-t-h Messages postés 129 Statut Membre 22
 
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"...
0