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 vers l'hexa et résultat bizarre


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut conversion vers l'hexa et résultat bizarre
    bonjour à tous:

    voilà mon probléme!!, je récupére la valeur d'une variable qui contiens la valeur 1 et je dois la convertir en hexa sur cette forme 00 01...
    j'ai essayé avec un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%2.4",variable);
    Mais le truc c'est qu'à l'affichage à l'écran quand je veux vérifier la conversion de cette valeur j'obtiens un 349748!!!

    je ne comprends pas!!!

    quelqu'un pourrait-il m'expliquer???

    Ps: très bonne anneé à tous!!

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Heu... d'apres mes souvenirs la syntaxe du format de printf est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    % [drapeau] [largeur] [.precision] [modificateur] type
    Visiblement, il te manque le type. Pour l'hexa c'est x ou X il me semble:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%2.4X",variable);
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Oui tu as raison mais en fait je l'avais mis dan sle code et juste oublié de le transcrire dans le post!!!
    j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%2.4x",variable);
    mais ça ne marche pas!!!

    Merci pour votre aide!!!

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    est ce que ta variable est un pointeur ?

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    déja un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%04X",variable);
    devrait de rapprocher de la solution. Par contre je ne sais pas comment mettre un espace entre les 2 octets.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Merci pour vos réponse!!!

    => hiko-seijuro : non ma variable n'est pas du tout de type pointeur, c'est un unsigned int et elle correspond à la valeur d'un champs que j'ai extrait d'une bd MySql!!

    =>pseudocode :j'ai essayé avec "%04X" et...ça ne marche pas, j'ai toujours le nb 348749...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Citation Envoyé par sanatou
    j'ai essayé avec "%04X" et...ça ne marche pas, j'ai toujours le nb 348749...
    Pas normal.
    Tu peux montrer ton code ?
    (affectation de la variable comprise)
    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.

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Merci pour ta réponse!!
    je t'envoie mon code:
    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
     
    unsigned int myRows_ch;
    MYSQL_RES* result_ch;
    MYSQL_ROW myRow_ch;
     
    requete_ch = "select id_chambre from chambres";
      if(result_ch=connectionSql(requete_ch))
     
      {
    	  if(result_ch != NULL)
    	  {
    		  myRows_ch = mysql_num_fields(result_ch);
     
    		  while ((myRow_ch = mysql_fetch_row(result_ch))) 
                        {
                                for (i = 0; i < myRows_ch; i++) 
                         {
    				{
                         printf("%04X",myRow_ch[i]);
                         }
                        }
                  }   
      }
    comme tu le constate, la variable dont je cherche à convertir la valeur est extraite d'une BD MySql et la première valeur à convertir est = à 1

    Merci pour votre patience!!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    1. Quel est le type de MYSQL_ROW ? (développe, je ne connais rien de MySQL : Si c'est une structure, un tableau, je veux voir les champs et tous les types qui correspondent).
    2. Tu devrais espacer les valeurs affichées : Pour l'instant, il n'y a aucun séparateur, tu devrais rajouter un espace ou un saut de ligne dans le printf().
    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.

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef char **MYSQL_ROW;
    myRow_ch[i] renvoie donc un (char *), donc une chaine texte !

    Il faut la convertir en entier (atoi()) avant de l'afficher avec un type X !!!!
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Merci bp pseudocode!!! en fait c'était ça!!!

    et merci à tous pour votre aide!!!

    mais quelqu'un connaitrait-il un moyen de séparer le 0001 en 00 01, j'ai besoin d'envoyer chaque octet séparémment!!!

    Merci...

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par sanatou
    Merci bp pseudocode!!! en fait c'était ça!!!

    et merci à tous pour votre aide!!!

    mais quelqu'un connaitrait-il un moyen de séparer le 0001 en 00 01, j'ai besoin d'envoyer chaque octet séparémment!!!

    Merci...
    Oui, il y a un moyen: tu écris ta propre routine.

    C'est facile, pas cher, et ça peut rapporter gros.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%02X %02X", nombre>>8, nombre & 0xFF);
    Néanmoins, je ne le recommande pas: Un affichage hexa avec des espaces veut généralement dire qu'on affiche une zone mémoire et non un nombre, avec tous les problèmes d'endianness que cela comporte sur un x86.

    Par exemple, un nombre valant 0x12AB, on s'attend à le voir écrit "12AB" ou "AB 12" sur x86, "12AB" ou "12 AB" sur une machine Big-Endian.
    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.

  14. #14
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Merci bp Medinoc!!! ça marche pour l'affichage!!

    Mais est ce que tu pourrais m'expliquer ce que signifient ces termes endianness, machine big-endian et x86...je t'avoue que je ne comprend pas du tout

    Merci bp encore une fois!!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Je pense que cet article expliquera mieux que moi.
    http://fr.wikipedia.org/wiki/Endianness

    Je crois aussi que la version English est plus claire, si tu comprends l'anglais.
    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.

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Je suis allée y faire un tour justement, merci beaucoup et très bonne année à toi!!!

  17. #17
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Merci bp Médinoc, je suis alle y faire un tour, c'est clair mnt!!

    très bonne journée!!

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

Discussions similaires

  1. Conversion ascii codé hexa vers hexa
    Par Bayard dans le forum Général Python
    Réponses: 1
    Dernier message: 17/03/2013, 15h14
  2. Conversion vers UTF8 hexa
    Par bractar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/11/2010, 18h51
  3. Conversion String en Hexa ("1F") vers byte
    Par ducseb dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2006, 20h03
  4. conversion : (Ascii en hexa) => nombre
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 21/04/2004, 14h44
  5. [débutant] conversion int en hexa
    Par sergoid dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/05/2003, 11h11

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