Langage c conversion binaire hexa
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Langage c conversion binaire hexa



  1. #1
    Alex31750

    Langage c conversion binaire hexa


    ------

    Bonjour tout le monde, je suis actuellement en IUT mesures physiques et je dois réaliser pour la rentrée un programme de conversion (binaire, hexa, décimal) en langage C. J'ai commencé à travailler dessus, j'ai réussi le programme "binaire-->décimal" mais là je bloque un peu sur le "binaire --> hexa".
    j'ai fait mon programme de telle sorte qu'il effectue le travail sur un premier quartet puis sur le deuxième avant de mettre les deux résultats à la suite et de donner donc le résultat sur le bit entier.
    J'aimerai affecter A à 10, B à 11, C à 12, D à 13, E à 14 et F à 15 comme dans le langage hexadécimal de base mais je n'y arrive pas, si vous pouviez m'aider, voici mon programme : (EN ESPERANT QUE L'INDENTATION MARCHE)

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    
    int BinToHex()
    {
        int poids_binaire[4];
        int digit;
        int i,k;
        int binaire[4];
        int resultat = 0;
    
        poids_binaire[0]=1;
        poids_binaire[1]=2;
        poids_binaire[2]=4;
        poids_binaire[3]=8;
    
    
        printf("Entrer un nombre binaire:\n\n");
    
            for (i=0;i<4;i++)
            {
                printf(" 1 er quartet : entrer le bit numero %d :\n ",i);
                scanf("%d",&digit);
                if (digit!= 0 && digit!= 1)
                    {
                        printf("RENTREZ UN 0 OU UN 1, ICI IL NE S\'AGIT PAS D\'UN MOT BINAIRE\n");
                        printf("Entrer le bit numero : %d\n ",i);
    
                        scanf("%d",&digit);
    
                    }
    
                binaire[i]=digit;
                //printf("bin=%d\n",binaire[i]);
                //printf("poids=%d\n",poids_binaire[i]);
    
            }
              for(k=0;k<4;k++)
              {
               resultat = resultat + binaire[k]*poids_binaire[k];
    
    
              }
              return (resultat);
    
    }
    int BinToHex1()
    {
        int poids_binaire1[4];
        int digit1;
        int i1,k1;
        int binaire1[4];
        int resultat1 = 0;
    
        poids_binaire1[0]=1;
        poids_binaire1[1]=2;
        poids_binaire1[2]=4;
        poids_binaire1[3]=8;
    
    
        printf("Entrer un nombre binaire:\n\n");
    
            for (i1=0;i1<4;i1++)
            {
                printf(" 2 eme quartet : entrer le bit numero %d :\n ",i1);
                scanf("%d",&digit1);
                if (digit1!= 0 && digit1!= 1)
                    {
                        printf("RENTREZ UN 0 OU UN 1, ICI IL NE S\'AGIT PAS D\'UN MOT BINAIRE\n");
                        printf("Entrer le bit numero : %d\n ",i1);
    
                        scanf("%d",&digit1);
    
                    }
    
                binaire1[i1]=digit1;
                //printf("bin=%d\n",binaire[i]);
                //printf("poids=%d\n",poids_binaire[i]);
    
            }
              for(k1=0;k1<4;k1++)
              {
               resultat1 = resultat1 + binaire1[k1]*poids_binaire1[k1];
    
              }
              return (resultat1);
    }
    int main()
    {
        int choix_operation;
        int decimal;
        int decimal1;
        int hexadecimal;
        int dec;
        int i;
    
            decimal = BinToHex();
            decimal1 = BinToHex1();
    
            printf("Le resultat en base decimale de l'octet est donc: %d%d\n",decimal,decimal1);
    
    
    
    
    
        return 0;
    }

    -----
    Dernière modification par Jack ; 28/12/2014 à 21h16. Motif: Modification balises code

  2. #2
    Alex31750

    Re : Langage c conversion binaire hexa

    je crois que l'indentation ne marche pas, je n'y arrive pas..

  3. #3
    Jack
    Modérateur

    Re : Langage c conversion binaire hexa

    Citation Envoyé par Alex31750 Voir le message
    je crois que l'indentation ne marche pas, je n'y arrive pas..
    Il faut placer ton code au bon endroit.

    Ton indentation est un peu bizarre, mais ça reste lisible
    Dernière modification par Jack ; 28/12/2014 à 21h17.

  4. #4
    Jack
    Modérateur

    Re : Langage c conversion binaire hexa

    pour afficher en hexadécimal, le formateur est %x et pas %d

    Code:
            printf("Le resultat en base hexadecimale de l'octet est donc: %x%x\n",decimal,decimal1);
    D'autre part, pour 2 fonctions decimal et decimal1? Une seule devrait suffire.

  5. A voir en vidéo sur Futura
  6. #5
    Alex31750

    Re : Langage c conversion binaire hexa

    Merci de ton aide jack, je ne sais pas je me suis dis que si je mettais deux fonctions avec les memes appellations celà pourrait faire bugger le programme.

  7. #6
    Jack
    Modérateur

    Re : Langage c conversion binaire hexa

    En C, 2 fonctions ne peuvent effectivement pas porter le même nom. Mais la même fonction pourrait être utilisée pour le quartet de poids faible et pour celui de poids fort.

  8. #7
    JeSuisConscient

    Re : Langage c conversion binaire hexa

    j'aurais fait les choses d'une autre maniere , on veut donc faire une conversion et afficher le résultat
    cela serait possible de savoir l'énoncé ?

  9. #8
    JeSuisConscient

    Re : Langage c conversion binaire hexa

    si tu dois faire des conversions binaire <-> décimal <-> hexa
    forte chance que tes paramétres d'entrée soit des chaines de caractères
    donc je verrais plus un truc de ce genre

    conversion(char *input,int base_input,char *output,int base_output)
    apres le travail reste a faire
    c'est convertir en entier la chaine input
    ensuite faire la conversion de l'entier vers la chaine output

  10. #9
    fred1599

    Re : Langage c conversion binaire hexa

    C'est tout de même assez choquant que les fonctions présentées par le PO soit sans argument, alors qu'on doit en attendre un. Par exemple BinToHex devrait attendre un nombre binaire sous forme de chaîne de caractères... et enregistrer le résultat dans une autre chaîne, je dirais donc deux paramètres. Il y a d'autres solutions, mais plus complexes. Au final je verrais un prototype comme void BinToHex(char *binary, char *hexa)

  11. #10
    JeSuisConscient

    Re : Langage c conversion binaire hexa

    voila comment je vois les choses mais sans doute autre solutions

    pour la conversion
    hexa/dec -> en entier
    il y a sscanf(input,"%x",&entier)/sscanf(input,"%d",&entier)
    ....
    et ensuite pour la sortie
    sprintf(output,"%x",entier)/sprintf(output,"%d",entier);

    il y a le cas c vrai pour le binaire
    76543210
    10110011

    il faudrait faire une boucle
    entier = 0
    entier = entier*2+1
    entier = entier*2+0
    entier = entier*2+1
    entier = entier*2+1
    entier = entier*2+0
    entier = entier*2+0
    entier = entier*2+1
    entier = entier*2+1

    ensuite le probleme de la conversion entier vers binaire cela ne devrait pas etre trop difficile
    il y a la solution du masque binaire
    masque=2^7
    output=""
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;
    if (masque&entier>0) output=output+"1" else output=output+"0"
    masque=masque>>1;

  12. #11
    Alex31750

    Projet langage c conversion

    Bonjour tout le monde, j'ai déjà posé une question il y a peu de temps, ayant eu des réponses très intéressantes et rapides je reviens aujourd'hui vers vous.
    Je dois réaliser un programme de conversion (binaire, hexa,déci)en langage C pour la rentrée, la consigne est très ouverte. Je vous donne à la suite le programme que j'ai réalisé jusqu'à présent.
    2 problèmes : je n'arrive pas à réellement expliquer mon programme pour la conversion numéro 6 (j'ai réussi un peu sur le coup du hasard), et je n'arrive pas à réaliser la conversion Hexadécimal -> décimal.

    Merci de votre aide, de plus j'aimerai savoir si vous auriez quelques conseils à me donner pour améliorer ce projet qui représente 60% de ma note d'informatique, sachant que je ne maîtrise pas très bien les caractères.



    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    void affichage()
    {
        printf("Bienvenue dans le programme de conversion BHD :\n\n");
        printf("Ce programme permet de changer la base d'un nombre instantanement\n\n");
        printf("Choisissez l\'operation a effectuer :\n\n");
        printf("1.Binaire en Decimal\n" );
        printf("2.Binaire en Hexadecimal\n\n" );
        printf("3.Decimal en Binaire\n" );
        printf("4.Decimal en Hexadecimal\n\n");
        printf("5.Hexadecimal en Decimal\n" );
        printf("6.Hexadecimal en Binaire\n\n" );
        printf("Je choisis d\'effectuer l\'operation: \n");
    }
    int BinToDec()
    {
        int poids_binaire[8];
        int digit;
        int i,k;
        int binaire[8];
        int resultat = 0;
    
        poids_binaire[0]=1;
        poids_binaire[1]=2;
        poids_binaire[2]=4;
        poids_binaire[3]=8;
        poids_binaire[4]=16;
        poids_binaire[5]=32;
        poids_binaire[6]=64;
        poids_binaire[7]=128;
        printf("Entrer un nombre binaire:\n");
    
            for (i=0;i<8;i++)
            {
                printf("Entrer le bit numero : %d\n ",i);
                scanf("%d",&digit);
                if (digit!= 0 && digit!= 1)
                    {
                        printf("RENTREZ UN 0 OU UN 1, ICI IL NE S\'AGIT PAS D\'UN MOT BINAIRE\n");
                        printf("Entrer le bit numero : %d\n ",i);
                        scanf("%d",&digit);
                    }
    
                binaire[i]=digit;
                //printf("bin=%d\n",binaire[i]);
                //printf("poids=%d\n",poids_binaire[i]);
    
            }
              for(k=0;k<8;k++)
              {
               resultat = resultat + binaire[k]*poids_binaire[k];
    
    
              }
              return (resultat);
    
    }
    int BinToHex()
    {
        int poids_binaire[4];
        int digit;
        int i,k;
        int binaire[4];
        int resultat = 0;
    
        poids_binaire[0]=1;
        poids_binaire[1]=2;
        poids_binaire[2]=4;
        poids_binaire[3]=8;
    
    
        printf("Entrer un nombre binaire:\n\n");
    
            for (i=0;i<4;i++)
            {
                printf(" 1 er quartet : entrer le bit numero %d :\n ",i);
                scanf("%d",&digit);
                if (digit!= 0 && digit!= 1)
                    {
                        printf("RENTREZ UN 0 OU UN 1, ICI IL NE S\'AGIT PAS D\'UN MOT BINAIRE\n");
                        printf("Entrer le bit numero : %d\n ",i);
    
                        scanf("%d",&digit);
    
                    }
    
                binaire[i]=digit;
                //printf("bin=%d\n",binaire[i]);
                //printf("poids=%d\n",poids_binaire[i]);
    
            }
              for(k=0;k<4;k++)
              {
               resultat = resultat + binaire[k]*poids_binaire[k];
    
    
              }
              return (resultat);
    
    }
    int BinToHex1()
    {
        int poids_binaire1[4];
        int digit1;
        int i1,k1;
        int binaire1[4];
        int resultat1 = 0;
    
        poids_binaire1[0]=1;
        poids_binaire1[1]=2;
        poids_binaire1[2]=4;
        poids_binaire1[3]=8;
    
    
        printf("Entrer un nombre binaire:\n\n");
    
            for (i1=0;i1<4;i1++)
            {
                printf(" 2 eme quartet : entrer le bit numero %d :\n ",i1);
                scanf("%d",&digit1);
                if (digit1!= 0 && digit1!= 1)
                    {
                        printf("RENTREZ UN 0 OU UN 1, ICI IL NE S\'AGIT PAS D\'UN MOT BINAIRE\n");
                        printf("Entrer le bit numero : %d\n ",i1);
    
                        scanf("%d",&digit1);
    
                    }
    
                binaire1[i1]=digit1;
                //printf("bin=%d\n",binaire[i]);
                //printf("poids=%d\n",poids_binaire[i]);
    
            }
              for(k1=0;k1<4;k1++)
              {
               resultat1 = resultat1 + binaire1[k1]*poids_binaire1[k1];
    
              }
              return (resultat1);
    }
    
    void DecToBin(int d){
        if (d != 0){
            if (d>1){
                DecToBin(d/2);
            }
            printf("%d", d%2);
        } else printf("0");
    }
    
    void DecToHexa()
    { int dec;
      int i;
      char exa[2];
    dec = 0;
    for (i = 0;i < 2;i++)
    {
    exa[i] = 0;
    }
    i = 0;
    printf("Entrer un nombre Decimal inferieur a 256:\n");
    scanf("%d", &dec);
     if (dec>256)
                    {
                        printf("RENTREZ UN UN NOMBRE INFERIEUR A 256, ICI CE N\'EST PAS LE CAS\n");
                        printf("Entrer un nombre Decimal inférieur a 256:\n");
                        scanf("%d", &dec);
                                    }
    while ((dec / 16) != 0)
    {
    exa[i] = dec % 16;
    dec = dec / 16;
    i++;
    }
    exa[i] = dec;
    printf("L\'equivalence du nombre en hexadecimal est donc:\t");
    while (i >= 0)
    {
    if (exa[i] == 15)
    {
    printf("F");
    }
    else if (exa[i] == 14)
    {
    printf("E");
    }
    else if (exa[i] == 13)
    {
    printf("D");
    }
    else if (exa[i] == 12)
    {
    printf("C");
    }
    else if (exa[i] == 11)
    {
    printf("B");
    }
    else if (exa[i] == 10)
    {
    printf("A");
    }
    else
    {
    printf("%d", exa[i]);
    }
    i--;
    }
    printf("\n");
    
    
    }
    void HexToBin(int d){
        if (d != 0){
            if (d>1){
                HexToBin(d/2);
            }
            printf("%X", d%2);
        } else printf("0");
    }
    
    
    int main()
    {
        int choix_operation;
        int decimal;
        int hexadecimal;
        int dec;
        int i;
        char exa[50];
        int decimal1;
        int hex;
        int again;
    
    
    
    
    
        affichage();
    
        scanf("%d",&choix_operation);
    
        switch (choix_operation)
         {
            case 1 :
            decimal = BinToDec();
            printf("Le resultat en base decimale est donc:%d\n",decimal);
            break;
    
            case 2 :
            decimal = BinToHex();
            decimal1 = BinToHex1();
    
             printf("Le resultat en base hexadecimale de l'octet est donc: %X%X\n",decimal,decimal1);
            break;
    
            case 3 :
           printf("Entrez un nombre en base 10 :\n");
           scanf("%d", &dec);
           while (dec>255)
    {
       printf("RENTREZ UN UN NOMBRE INFERIEUR A 256, ICI CE N\'EST PAS LE CAS\n");
       printf("Entrer un nombre Decimal inférieur à 256:\n");
       scanf("%d", &dec);
    }
    
           printf("Son equivalence binaire est:\n");
           DecToBin(dec);
            break;
    
            case 4 :
    
            DecToHexa();
    
            break;
    
            case 5 :
      printf("Entrez un nombre en base 10 inférieur à 10 :\n");
           scanf("%d", &dec);
           if (dec>9)
                    {
                        printf("RENTREZ UN UN NOMBRE INFERIEUR A 10, ICI CE N\'EST PAS LE CAS\n");
                        printf("Entrer un nombre Decimal inférieur à 10:\n");
                        scanf("%d", &dec);
                    }
           printf("Son equivalence binaire est:\n");
           DecToBin(dec);
            break;
    
            case 6 :
    
         printf("Entrez un nombre en base 16 :\n");
        scanf("%X,%D", &hex);
    
           printf("Son equivalence binaire est:\n");
    
           HexToBin(hex);
            break;
    
         }
    
    printf("Voulez vous refaire une nouvelle operation ?\n\n");
    printf("Si oui tapez 1 sinon si vous voulez quitter taper 2\n\n");
    scanf("%d",&again);
    
    if(again==1)
    {
        main();
    }
    else
    {
    printf("\nAu revoir ");
    }
    
        return 0;
    }
    Dernière modification par Alex31750 ; 29/12/2014 à 19h11.

  13. #12
    Jack
    Modérateur

    Re : Projet langage c conversion

    Discussions fusionnées. Je ne vois pas bien l'intérêt d'ouvrir une nouvelle discussion pour chaque type de conversion alors qu'il s'agit du même programme.


  14. #13
    JeSuisConscient

    Re : Projet langage c conversion

    tu as bien fait surtout que sur le net il suffit de chercher l'algorithme de changement de base
    http://algor.chez.com/math/chgbase.htm

  15. #14
    Jack
    Modérateur

    Re : Projet langage c conversion

    En effet, comme tu l'as fait remarquer plus haut, l'idéal est de partir d'une chaîne de caractères pour arriver à une nouvelle chaîne de caractère après conversion.
    Dernière modification par Jack ; 30/12/2014 à 10h15.

  16. #15
    fred1599

    Re : Projet langage c conversion

    En effet, comme tu l'as fait remarquer plus haut, l'idéal est de partir d'une chaîne de caractères pour arriver à une nouvelle chaîne de caractère après conversion.
    Il faudrait être certains que le PO à vu l'allocation dynamique. Sinon ma solution plus haut permet de le faire sans passer par cela...

  17. #16
    JeSuisConscient

    Re : Projet langage c conversion

    Citation Envoyé par fred1599 Voir le message
    Il faudrait être certains que le PO à vu l'allocation dynamique. Sinon ma solution plus haut permet de le faire sans passer par cela...
    s'il tourne les pages suivantes, un laser va le désintégrer ?

  18. #17
    fred1599

    Re : Projet langage c conversion

    s'il tourne les pages suivantes, un laser va le désintégrer ?
    scolaire or not scolaire

Discussions similaires

  1. Convertisseur hexa <-> binaire évolué
    Par invite6dabc3a1 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 08/06/2010, 17h59
  2. langage C : conversion en binaire d'un fichier en hexa
    Par invitedba13d1f dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 06/07/2009, 08h46
  3. Conversion hexa-binaire dans une macro Excel
    Par jecario dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 06/06/2007, 21h47
  4. Conversion hexa en BCD sur PIC
    Par invite46123e47 dans le forum Électronique
    Réponses: 2
    Dernier message: 14/04/2004, 09h17