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 :

Binaire vers Hexa et inversement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut Binaire vers Hexa et inversement
    Bonjour a tous,

    Bon, voila, j'ai coder (avec l'aide de certains membres de Developpez.net), un simple programme permettant la conversion de nombres Binaire et Hexa vers le Décimal et inversement

    Maintenant je souhaiterais vers la conversion du Binaire vers Hexa et inversement, je sais le faire a la main, mais je ne sais pas le retranscrire en C

    A la main, j'utilise cette méthode :

    1010|1101|0010 Regroupement des bits par 4, lecture de droite vers la gauche
    A D 10 puis conversion de chaque groupe de 4 bits en hexa

    Or, en C, je ne sais pas comment faire

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 490
    Par défaut
    Étant donné qu'un chiffre hexadécimal représente exactement quatre bits, que l'on peut procéder par tranches et qu'il y a 16 chiffres hexadécimaux, tu peux isoler la première tranche avec un & logique sur 15 (équivalent d'un modulo 16, en l'occurrence), et te servir de ce nombre comme index d'un tableau qui contient tous tes chiffres :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
        "0123456789abcdef"[x & 15];

    Tu décales ensuite ton entier de quatre bits vers la droite avec « >> » et tu recommence jusqu'à ce que ton entier soit nul.

  3. #3
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de ta réponse, mais y a 2-3 choses que je ne comprend pas

    Que veut tu dire par "première tranche" ? 4 bits en binaire ou un chiffre en héxa ?
    Un modulo renvoi le reste d'une division, je ne comprend pas pourquoi on l'utilise ici ?

    Je ne n'utilise pas de constante lors de la conversion, le nombre (qu'il soit en hexa ou binaire) est defini par l'user, c'est donc avec une variable que je travaille

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Que veut tu dire par "première tranche" ?
    La première tranche correspond aux 4 derniers bits (0 à 3) du nombre.

    4 bits en binaire ou un chiffre en héxa ?
    C'est-à-dire ?
    Un nombre, qu'il soit représenté en binaire, décimal, hexa ou octal, c'est la même chose. Par exemple, 10 (hexa) vaut 16 (décimal) mais vaut aussi 10000 (binaire). En mémoire, ça ne change rien, tout est binaire quoi qu'il arrive.

    Un modulo renvoi le reste d'une division, je ne comprend pas pourquoi on l'utilise ici ?
    Tu peux utiliser le "modulo 16" ou "& 15" (& est l'opérateur "ET bit-à-bit"), ça revient au même dans ce contexte. Tant qu'on se retrouve avec une plage de valeurs située entre 0 et (2 puissance n)-1, où 'n' vaut justement 4 (tranche de 4 bits).
    Après, on décale le nombre à représenter, en déplaçant de 4 bits. Et on refait la même opération. Etc.

    Je ne n'utilise pas de constante lors de la conversion, le nombre (qu'il soit en hexa ou binaire) est defini par l'user, c'est donc avec une variable que je travaille
    Que veux-tu dire ? Et où vois-tu une constante ?
    Le résultat du "modulo 16" ou de "& 15" te servira simplement d'index pour obtenir le chiffre hexadécimal dans le tableau de valeurs "0123456789ABCDEF".
    Une fois la première tranche effectuée, on passe à la seconde, etc. A chaque tranche, il faut chercher dans le tableau la valeur associée.

    Mais par contre, vu qu'on commence les tranches par la droite et non par la gauche, tu obtiendras une représentation hexadécimale à l'envers. Il faudra donc bidouiller pour remettre à l'endroit, soit à la fin, soit au fur et à mesure.

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de vos réponses

    Si, j'ai bien compris :

    - J'initialise le tableau avec les valeurs de 1 à F
    - Je pars d'un nombre binaire x

    - J'utilise sur x un &15
    - Je decale de 4bits

    - J'utilise sur x un &15
    - Je decale de 4bits

    ....

    - Puis je change de sens au nombre héxa obtenu


    Est-ce que c'est sa ?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 490
    Par défaut
    Citation Envoyé par Antoinejdu44 Voir le message
    Est-ce que c'est sa ?
    Hint : Le « ç » se trouve sur la touche « 9 ».

    Oui, c'est ça.

    Un modulo renvoi le reste d'une division, je ne comprend pas pourquoi on l'utilise ici ?
    On l'utilise pour sa congruence : dès qu'il a atteint la limite d'une plage, il reprend à son début. Par exemple, comment faire pour ne garder que les deux chiffres de poids faible d'un nombre décimal ? On le divise par 100 et on examine le reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      0 ÷ 100 = 0 reste  0 ;
      1 ÷ 100 = 0 reste  1 ;
      2 ÷ 100 = 0 reste  2 ;
        …
     98 ÷ 100 = 0 reste 98 ;
     99 ÷ 100 = 0 reste 99 ;
    100 ÷ 100 = 1 reste  0 ;
    101 ÷ 100 = 1 reste  1
    En l'occurence, la taille de la plage (100) représente exactement deux chiffres décimaux. On peut donc les lire directement sans avoir à poser de calcul. C'est ce que l'on fait avec notre « & » : comme un chiffre hexadécimal représente exactement quatre bits, on peut les isoler directement sans autre forme de calcul (même si, aujourd'hui, quelque soit l'approche choisie, le compilateur est en général capable de faire lui-même des optimisations).

    Lorsqu'on ne peut pas le faire, il faut passer par les divisions successives. L'intérêt est que ça marche avec n'importe quelle valeur et c'est donc l'approche la plus censée pour convertir n'importe quelle base en n'importe quelle autre. Y compris en binaire. Dans ce dernier cas, étant donné qu'il s'agit de divisions par 2, on parle de dichotomies successives.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question de binaire : mot hexa norme Ff <-> fF
    Par psylox dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 07/05/2007, 12h29
  2. fichier texte dos vers linux et inversement
    Par mencaglia dans le forum C++
    Réponses: 4
    Dernier message: 23/09/2006, 11h59
  3. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. [langage] conversion décimal vers hexa
    Par chipster dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2004, 16h05

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