Problème valeur chaîne de caractères

Résolu/Fermé
M-a-t-h - Modifié par M-a-t-h le 7/02/2011 à 19:02
M-a-t-h Messages postés 117 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 22 février 2014 - 8 févr. 2011 à 17:59
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 vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
7 févr. 2011 à 22:38
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
8 févr. 2011 à 08:41
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 117 Date d'inscription samedi 20 février 2010 Statut Membre Dernière intervention 22 février 2014 22
8 févr. 2011 à 17:59
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