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 Hexa -> décimal


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut Conversion Hexa -> décimal
    Bonjour à tous

    Voila, j'ai un petit problème de conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    	char HexTemp1[5];
    	unsigned int Temperature1;
    	Temperature1 = 800;
    	char ChaineAEnvoyee[20];
    	strcpy(ChaineAEnvoyee,"040302");
    	sprintf(HexTemp1,"%X",(char)Temperature1);
    	strcat(ChaineAEnvoyee,HexTemp1);
    ceci est un test bien entendu, je recevrai la température d'une classe...

    Quand je lance le programme, en debug je remarque que quand j'exécute la ligne : "sprintf(HexTemp1,"%X",(char)Temperature1);", je n'obtient que "20" en hexadécimal dans la variable HexTemp1 alors que je devrais obtenir : "0320".

    Auriez-vous la solution à ce problème ?

    Merci.

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Ton problème vient du cast en char. 800 == 0x0320, mais avec le cast en char, tu ne prends que les 8 premiers bit, donc 0x20. Donc, pourquoi faire ce cast?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par IrmatDen
    Salut,

    Ton problème vient du cast en char. 800 == 0x0320, mais avec le cast en char, tu ne prends que les 8 premiers bit, donc 0x20. Donc, pourquoi faire ce cast?
    Je pensais que le sprintf n'accepté pas les int enfin bref une erreur de débutant ^^

    merci beaucoup de ton aide maintenant ca marche !

    Parcontre, le résultat est bien "0320" mais je n'ai que "320" comment puis-je rajouter le caractère '0' ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nemesis007
    Je pensais que le sprintf n'accepté pas les int enfin bref une erreur de débutant
    En fait *printf() attend un unsigned avec "%X". Il faut un cast explicite si la variable n'est pas de ce type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (HexTemp1, "%X", (unsigned) Temperature1);
    Parcontre, le résultat est bien "0320" mais je n'ai que "320" comment puis-je rajouter le caractère '0' ?
    Pour formater sur 4 digits avec des 0 en tête, il faut utiliser "%04X" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (HexTemp1, "%04X", (unsigned) Temperature1);
    Ton code est inutilement compliqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	unsigned int Temperature1 = 800;
    	char ChaineAEnvoyee[20];
    	sprintf (ChaineAEnvoyee, "%s%04X", "040302"
                     , (unsigned)Temperature1);
    ou même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	unsigned int Temperature1 = 800;
    	char ChaineAEnvoyee[20];
    	sprintf (ChaineAEnvoyee, "040302%04X", Temperature1);
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Conversion Hexa en Décimal
    Par riko7790 dans le forum Général Python
    Réponses: 4
    Dernier message: 23/04/2014, 18h54
  2. Conversion hexa / décimal
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 40
    Dernier message: 01/05/2013, 12h27
  3. Conversion Hexa => binaire => décimal
    Par Matmal11 dans le forum Tcl/Tk
    Réponses: 6
    Dernier message: 10/04/2010, 13h53
  4. Conversion Hexa --> Decimal
    Par lory_van_eyck dans le forum Général Python
    Réponses: 2
    Dernier message: 28/09/2005, 07h29
  5. conversion hexa-binaire
    Par jack69 dans le forum C
    Réponses: 8
    Dernier message: 04/04/2005, 16h33

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