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 héxadecimal -> decimal


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut Conversion héxadecimal -> decimal
    Bonjour,

    Voila j'ai un nombre en héxa sur 4 octets et stocké dans un tableau de char

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fread(adresse,1,4,file);     //adresse[4] contient "03 00 00 C8"
    c1[0] = adresse[0];         // c1[0] contient "03"
    c2[0] = adresse[1];         // c2[0] contient "00"
    c3[0] = adresse[2];         // c3[0] contient "00"
    c4[0] = adresse[3];         // c4[0] contient "C8"
    adresseEnreg = (c2[0])*256*256*256 + (c1[0])*256*256 + 
                                     (c4[0])*256 + c3[0];
    Avec le debuger, je me suis aperçu que (c1[0])*256*256 contient 196608 (0x00030000),
    (c4[0])*256 contient 51200 (0x0000C800) jusque là tout est normal,mais ensuite je me suis aperçu que adresseEnreg contient 182272 (0x0002C800) alors qu'il devrait contenir 247808 (0x0003C800)...

    si qq'un voit l'erreur...

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Quel est le type utilisé pour adresseEnreg ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    type long

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Essaie en unsigned long.

    Lorsque tu mets c[i] = ... , tu l'affiche réellement ou c'est une supposition ?

    Et si tu ajoutes seulement les non nuls (C[1] et C[4])

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    Essaie en unsigned long
    ça n'a rien changé

    Et si tu ajoutes seulement les non nuls (C[1] et C[4])
    ça n'a rien changé non plus

    Lorsque tu mets c[i] = ... , tu l'affiche réellement ou c'est une supposition ?
    j'ai pas trop compris ce que tu voulais dire là

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    j'ai pas trop compris ce que tu voulais dire là
    Et bien lorsque tu dis, c1[0] vaut 03, est ce que tu en es sur ou c'est ce que tu voudrais ?

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    Quel est le rapport avec la conversion hexadécimal -> décimal
    Le resultat de l'addiction est sensé etre en décimal

  8. #8
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par cout
    Bonjour,

    Voila j'ai un nombre en héxa sur 4 octets et stocké dans un tableau de char

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fread(adresse,1,4,file);     //adresse[4] contient "03 00 00 C8"
    c1[0] = adresse[0];         // c1[0] contient "03"
    c2[0] = adresse[1];         // c2[0] contient "00"
    c3[0] = adresse[2];         // c3[0] contient "00"
    c4[0] = adresse[3];         // c4[0] contient "C8"
    adresseEnreg = (c2[0])*256*256*256 + (c1[0])*256*256 + 
                                     (c4[0])*256 + c3[0];
    Avec le debuger, je me suis aperçu que (c1[0])*256*256 contient 196608 (0x00030000),
    (c4[0])*256 contient 51200 (0x0000C800) jusque là tout est normal,mais ensuite je me suis aperçu que adresseEnreg contient 182272 (0x0002C800) alors qu'il devrait contenir 247808 (0x0003C800)...

    si qq'un voit l'erreur...
    Quel est le rapport avec la conversion hexadécimal -> décimal ?

    Pour résumer, ici tu assumes un passage de la base 256 à la base 10, est-ce vraiment ce que tu veux (en faisant en plus joujou avec l'endianess...) ?

    Pour un passage hexadecimal -> decimal c'est LSB*16^0 + (LSB+1)*16^1 + ... + MSB*16^N où N est (le nombre de bytes à traiter -1)

    A+

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cout
    Bonjour,

    Voila j'ai un nombre en héxa sur 4 octets et stocké dans un tableau de char

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fread(adresse,1,4,file);     //adresse[4] contient "03 00 00 C8"
    c1[0] = adresse[0];         // c1[0] contient "03"
    c2[0] = adresse[1];         // c2[0] contient "00"
    c3[0] = adresse[2];         // c3[0] contient "00"
    c4[0] = adresse[3];         // c4[0] contient "C8"
    adresseEnreg = (c2[0])*256*256*256 + (c1[0])*256*256 + 
                                     (c4[0])*256 + c3[0];
    Avec le debuger, je me suis aperçu que (c1[0])*256*256 contient 196608 (0x00030000),
    (c4[0])*256 contient 51200 (0x0000C800) jusque là tout est normal,mais ensuite je me suis aperçu que adresseEnreg contient 182272 (0x0002C800) alors qu'il devrait contenir 247808 (0x0003C800)...

    si qq'un voit l'erreur...
    Peut être qu'en soignant un peu la présentation, on arriverait à écrire du code moins buggé...
    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
     
    #include <stdio.h>
     
    int main (void)
    {
       unsigned char adresse[4] =
          {
             0x03, 0x00, 0x00, 0xC8
          };
       unsigned c1 = adresse[0];         // c1[0] contient "03"
       unsigned c2 = adresse[1];         // c2[0] contient "00"
       unsigned c3 = adresse[2];         // c3[0] contient "00"
       unsigned c4 = adresse[3];         // c4[0] contient "C8"
     
    #if 0
     
       unsigned long adresseEnreg = c2 * 256 * 256 * 256
                                    + c1 * 256 * 256
                                    + c4 * 256
                                    + c3;
    #else
     
       unsigned long adresseEnreg = c1 * 256 * 256 * 256
                                    + c2 * 256 * 256
                                    + c3 * 256
                                    + c4;
    #endif
     
       printf ("c1 = %02X\n", c1);
       printf ("c2 = %02X\n", c2);
       printf ("c3 = %02X\n", c3);
       printf ("c4 = %02X\n", c4);
     
       printf ("adresseEnreg = %08lX\n", adresseEnreg);
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    c1 = 03
    c2 = 00
    c3 = 00
    c4 = C8
    adresseEnreg = 030000C8
     
    Press ENTER to continue.

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

Discussions similaires

  1. conversion heure en decimal
    Par Goldorak2 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/08/2007, 17h34
  2. conversion sexadecimaux vers decimal
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 05/02/2007, 12h17
  3. conversion chaine string, decimal,integer
    Par gsmdu62 dans le forum Delphi
    Réponses: 10
    Dernier message: 19/06/2006, 22h40
  4. Conversion chaine en decimal
    Par siddh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/02/2006, 17h50
  5. conversion nombre binaire -> decimal
    Par spoun95 dans le forum Langage
    Réponses: 7
    Dernier message: 25/11/2005, 17h46

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