/************************************************************************* http://www-sop.inria.fr/oasis/personnel/Carine.Courbis/c/ **************************************************************************/ /* #include a inclure si on utilise la fonction double pow(double, double); */ #include #define MAX 33 /* ie 4 octets + 1 pour le caractere null */ typedef enum {FALSE, TRUE} Boolean; /* Programme qui convertit une chaine contenant des caracteres binaires en un decimal long non signe */ void main() { Boolean estNonFini = TRUE; char binaire[MAX]; int nbBitsSaisis = 0; int bit; int i; unsigned long decimal = 0; unsigned long puissance2 = 1; /* initialisation du tableau contenant la valeur binaire 0 */ for (i = 0; i= MAX-1) estNonFini = FALSE; else binaire[nbBitsSaisis++] = (char)bit; break; case ' ': /* si aucun bit n'a ete saisi, on ne sort pas de la boucle */ if (nbBitsSaisis > 0) estNonFini = FALSE; break; default: estNonFini = FALSE; } } /* Decalage des caracteres de la chaire contenant la valeur binaire. En effet, par exemple le nombre binaire 110011 sera saisi comme etant 11001100000000000000000000000000 car on ne connait pas la taille du nombre binaire a convertir. Donc il faut decaler les caracteres pour obtenir 00000000000000000000000000110011 (ie le nombre voulu par l'utilisateur) */ if (nbBitsSaisis < MAX-1) { for (i = nbBitsSaisis-1; i>=0; --i) { binaire[MAX-1-(nbBitsSaisis-i)] = binaire[i]; } for (i = 0; i< (MAX - 1 - nbBitsSaisis); i++) binaire[i] = '0'; } /* Calcul de la valeur decimale du nombre binaire */ for (i=0; i puissance2 *= 2 */ if (binaire[MAX-2-i] == '1') decimal += puissance2; /* <=> decimal += (long)pow((double)2, (double)i); */ } printf("%s = %lu\n", binaire, decimal); }