Problème valeur chaîne de caractères

Résolu
M-a-t-h -  
M-a-t-h Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   -
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 682 Date d'inscription   Statut Membre Dernière intervention   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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 118 Date d'inscription   Statut Membre Dernière intervention   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