IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Conversion Binaire - > Decimal


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut Conversion Binaire - > Decimal
    Bonsoir,

    J'essayer d'implementer une fonction de conversion Binaire -> Decimal, le problème c'est que je n'arrive a convertir seulement avec un nombre de bit connnus, ce qui est problèmatique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
         int Tab[MAX_SIZE] = {0};
         int i;
         int k;
         int o=0;
         int Sum=0;
         int Table[MAX_SIZE]={0};
         int Nb10=0;
         int Power[MAX_SIZE]={0};
     
         for(i=0;i<MAX_SIZE;i++)
          {
     
                   printf("Entrer une valeur pour Tab[%d] = ", i);
                   scanf("%d", &Tab[i]);
     
              while(Tab[i]>1)
               {
                   printf("Entrer une valeur pour Tab[%d] = ", i);
                   scanf("%d", &Tab[i]);
               }
          }
     
         printf("\n\n");
     
         for(i=0;i<MAX_SIZE;i++)
          {
              printf("Tab[%d] = %d.\n", i, Tab[i]);
          }
     
         for(k = i - 1; k >= 0; k --)
          {
              Table[o] = Tab[k];
              Power[o] = (Table[o]) * (pow(BASE, o));
              Sum = Sum + Power[o];
     
              o ++;
          }
     
         Nb10=Sum;
     
         printf("\n%d en base decimal.\n", Nb10);
    Le code n'est pas optimiser, plein de printf & de variable inutiles, en bref...

    Donc ma question et de savoir comment coder un convertisseur digne de ce nom ?!

    J'ai eu plusieur idées, comme recuperer dans une chaîne de caractère les saisies de l'utilisateur puis décaller chaque bit vers la gauche du nombre de bit déjà saisie.

    Ou alors arrêter la récuperation quand une certaine occurence est tapée par l'utilisateur (end par exemple), mais bon pas trés pratique...

    J'ai donc quelque idées, mais je n'arrive pas a les réaliser, si quelqu'un pouvait me donner quelques tuyaux afin de me débloquer, merci !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 453
    Par défaut
    C'est une question récurrente. Pour convertir un nombre dans une base, il faut diviser le nombre à convertir par la base dans laquelle tu travailles (ici, 10), récupérer le reste, le stocker dans une chaîne, et itérer jusqu'à ce que le nombre de départ atteigne zéro. Ensuite tu lis la chaîne de droite à gauche. Exemple :

    4795 ÷ 10 = 479, reste 5 ;
    479 ÷ 10 = 47, reste 9 ;
    47 ÷ 10 = 4, reste 7 ;
    4 ÷ 10 = 0, reste 4.

    En relisant les restes de bas en haut, tu obtiens bien les valeurs de départ. Si tu leur additionnes la valeur du caractère « 0 » (avec '0'), tu obtiens des caractères affichables.

    Tu n'as plus qu'à saisir ton nombre dans un entier int ordinaire et à faire des divisions successives dans une boucle pour réécrire un embryon de printf. Tu peux convertir n'importe quel nombre dans n'importe quelle base de cette façon.

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    C'est une question récurrente depuis quelque temps: comment faire pour convertir un nombre binaire en partant d'un tableau, sachant que strlen(mon_nbre_binaire) > MAX_SIZE

    Sachant que l'on doit déclarer dans tout les cas la taille d'un tableau (donc pas possible de le remplir à la demande 'au fur et à mesure"), il me semble que la dernière fois avait été évoqué l'allocation dynamique d'un pointeur sur ledit nombre binaire à convertir.

    Vivement le second trimestre que la nature des exos change

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 453
    Par défaut
    Citation Envoyé par Gnux Voir le message
    C'est une question récurrente depuis quelque temps: comment faire pour convertir un nombre binaire en partant d'un tableau, sachant que strlen(mon_nbre_binaire) > MAX_SIZE
    Dans ce cas-là, on fait exactement comme à l'école, sur papier : on divise « par tranches », en descendant à chaque fois un nombre d'octets compatible avec la taille des entiers et en progressant dans le tableau de gauche à droite, jusqu'au bout.

    Ça vaudrait le coup de mettre ça dans la F.A.Q., tiens.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 31
    Par défaut
    C'est juste un banal mini projet personnel, hors cadre scolaire o:

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Dans ce cas-là, on fait exactement comme à l'école, sur papier : on divise « par tranches », en descendant à chaque fois un nombre d'octets compatible avec la taille des entiers et en progressant dans le tableau de gauche à droite, jusqu'au bout.

    Ça vaudrait le coup de mettre ça dans la F.A.Q., tiens.
    L'autre méthode qui avait été donnée (ça y est je m'en souviens) consistait à calculer le nombre de puissance de 2 qu'il fallait pour atteindre le nombre décimal donné. Cela permet de déclarer un tableau de taille fixée par avance pour éviter tout débordement.

    Ca vaudrait vraiment le coup de mettre cela dans la faq, surtout concernant l'allocation des tableaux

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 453
    Par défaut
    Citation Envoyé par Gnux Voir le message
    L'autre méthode qui avait été donnée (ça y est je m'en souviens) consistait à calculer le nombre de puissance de 2 qu'il fallait pour atteindre le nombre décimal donné.
    Cela revient au même : ou tu divises successivement par deux jusqu'à arriver à zéro, ou tu multiplies successivement un registre par deux pour obtenir lesdites puissances. Dans tous les cas, il te faut faire des calculs sur des nombres du format de celui que tu traites, ne serait-ce que pour faire les comparaisons, quand tu cherches les puissances en question.

Discussions similaires

  1. conversion nombre binaire en decimal
    Par mendezino dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/04/2015, 20h03
  2. aide:lisp conversion binaire en decimal
    Par david0924 dans le forum Lisp
    Réponses: 1
    Dernier message: 25/01/2011, 10h04
  3. Conversion binaire en decimal cas de plusieurs bit
    Par crazyvirus dans le forum C++
    Réponses: 2
    Dernier message: 09/11/2009, 09h54
  4. aide conversion binaire vers decimal
    Par getstar dans le forum Débuter
    Réponses: 7
    Dernier message: 18/06/2009, 01h50
  5. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo