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 :

Convertir décimal en hexadécimal (et inversement)


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Par défaut Convertir décimal en hexadécimal (et inversement)
    Bonjour,

    Je suis étudié en première année à l'ensma. L'autre jour en à peine une heure et quart d'initiation à C, le prof nous à demander de créer un programme pour convertit décimal en héxadécimal (et inversement) en n'utilisant que des opérations logique et une boucle à incrémenter.

    Autant dire que j'en ai strictement aucune idée.

    Merci, si vous avez des idées...

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Déjà, il faut préciser la demande : Qu'est-ce que votre prof appelle "décimal" et "hexadécimal" ?
    Car une fois mis dans un int, un nombre est un nombre, un point c'est tout. Binaire, décimal et hexadécimal ne sont que des représentations, donc valables dans le cas de chaînes de caractères.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Par défaut
    Je pense qu'il s'agit d'une conversion de la représentation.

    Par exemple je rentre 10082008 et il m'affiche Ox99d6d8.

    C'est vrai que je suis hélas déjà pas mal largué en info mais si j'ai bien compris il faudrait "juste" faire des correspondance entres tableaux de numération décimale et hexadécimale.

    J'ai bien trouvé ce programme

    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
    __inline BYTE HexVal(BYTE bt) 
    {
        if(bt >= '0' && bt <= '9') return (bt - 0x30); 
        if(bt >= 'a' && bt <= 'z') return (bt - 0x57);
        if(bt >= 'A' && bt <= 'Z') return (bt - 0x37); 
        return bt; 
    }
     
    void __stdcall Hex2Bin(BYTE* lpIn, DWORD dwInSize, BYTE* lpOut)
    {
      DWORD i = (dwInSize-1);
      do {
        lpOut[i] = (HexVal(lpIn[i*2]) << 4) | (HexVal(lpIn[i*2+1]));
      } while(i--);
    }
    void __stdcall Bin2Hex(BYTE* lpIn, DWORD dwInSize, BYTE* lpOut)
    {
      static const BYTE HexaTable[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
                                         0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 };
      DWORD i = (dwInSize-1);
      do {
        lpOut[2*i] = HexaTable[(lpIn[i] >> 4) & 0x0F];
        lpOut[2*i+1] = HexaTable[lpIn[i] & 0x0F];
      } while(i--); 
    }
    Mais même si je ne comprend que la moitié et encore, je doute qu'il correspond aux attendes de l'exo.

    Merci

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce programme n'y correspond pas et est mal fait, de surcroit.
    Pour faire les conversions, il y a typiquement quatre tâches qui doivent être rendues possibles:
    • Convertir une chaîne représentant un nombre en décimal en int.
    • Convertir une chaîne représentant un nombre en hexadécimal en int.
    • Convertir un int en chaîne représentant un nombre en décimal.
    • Convertir un int en chaîne représentant un nombre en hexadécimal.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    J'ai d'avis que le prof veut que tu comprennes comment on fait un changement de base à la main:
    En base 10 (décimal), un nombre N est représenté par 'an,...a2a1a0', avec ai appartient à {0,1,2,3,4,5,6,7,8,9} et N = Somme(i=0 à n)ai*10^i. (10^i veut dire 10 à la puissance i). Par exemple: '124': a0=4, a1=2 et a3=1.
    En base 16 (hexadécimal), cela donne: un nombre N est représenté par 'bn...b2b1b0', avec bi appartient à {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} et N = Somme(i=0 à n)ai*16^i, avec A vaut 10 décimal, B 11, C 12... F 15. Par exemple '7C' avec a0=C et a1=7.
    Donc ton exercice c'est
    1/à partir d'un nombre en décimal trouver les coefficients b0, b1, b2, ..., bn équivalent.
    2/à partir d'un nombre en hexadécimal trouver les coefficients a0, a1, a2, ..., an équivalent.

    Fait un petit algo sur une feuille de papier et ensuite essaie de le traduire en C. Dès que tu as un problème, post ton code pour avoir de l'aide.
    Bon courage.

Discussions similaires

  1. Convertir décimal =>octet
    Par Papipen dans le forum Général Python
    Réponses: 1
    Dernier message: 29/12/2008, 11h36
  2. Réponses: 7
    Dernier message: 26/06/2007, 10h36
  3. Réponses: 6
    Dernier message: 16/01/2006, 20h33
  4. Convertir Décimal en entier ?
    Par _developpeur_ dans le forum Access
    Réponses: 12
    Dernier message: 11/01/2006, 15h41
  5. Convertir des valeurs hexadécimal en integer
    Par Bernard Martineau dans le forum Langage
    Réponses: 4
    Dernier message: 11/10/2005, 16h59

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