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 :

Passage d'un Long en Hexa puis en Ascii


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut Passage d'un Long en Hexa puis en Ascii
    Bonjour,

    Voisi mon problème,

    j'ai un unsigned long qui vaut par exemple vaut 4456518
    Je doit le transformer en hexa ce qui donne 440046
    Ensuite je doite prendre les 2 premiers octet soit "0046" et le transformer en ASCII de même pour les 2 derniers octet "44"
    ce qui le donne au final en ascii "DF".

    Si vous pouvez me donner des méthodes de conversion je suis intéressé.

    Merci.

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    sprintf/snprintf avec le format hexa, puis tu retransformes au fur et à mesure ?
    C'est long et casse gueule...
    Mais c'est une solution possible....

    (je suis juste perdu avec ton DF issu de la concat de 44 et 0046)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    C'est la valeur hexadécimale des caractère ASCII 'D' et 'F':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0x44 = 'D' et 0x46 = 'F'

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Es-tu sûr qu'il s'agit d'ASCII ou bien plutôt d'UTF-16 ou UCS-2?
    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
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Je vais peut être dire une connerie mais pour les caractères "normaux" (en l’occurrence ici 'D' et 'F'), quelque soit l’Unicode, leur valeur est la même, nan?

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Le "0046" me faisait plus penser à '\0' et 'F'...

    Du coup : même remarque que Médinoc...

    En Unicode... ça fera en 0044 et 0046 il me semble... mais ça ne sera donc pas "simplement" 44, vu que cela ne sera pas un simple char
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Par défaut
    C'est la valeur hexadécimale des caractère ASCII 'D' et 'F' comme l'as dit LinuxUser.
    Alors il n'existe pas de façon plus simple que le sprintf ....

  8. #8
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par LinuxUser Voir le message
    Je vais peut être dire une connerie mais pour les caractères "normaux" (en l’occurrence ici 'D' et 'F'), quelque soit l’Unicode, leur valeur est la même, nan?
    Bonjour,

    Oui ils ont la même valeurs mais un encodage différent, au moins deux octets pour UTF16 (variable au minimum 2 octets) et UCS2 (déprécié mais fixe 2 octets). Suivant les cas de figure si tu as de l'UTF16 un caractère pourra être encodé sur plus de deux octets attention aux décalages.

    D'ailleurs utiliser un long peut aussi être casse gueule suivant les plateformes il peut faire 32 bits ou 64 bits. Il vaut mieux utiliser un uint32_t pour s'assurer de la taille.
    Ensuite il y a l'endianess à prendre en considération :
    DF en ascii = 0x44 0x46
    DF en UCS2-BE = 0x00 0x44 0x00 0x46
    DF en UCS2-LE = 0x44 0x00 0x46 0x00
    Une fois que tu es assuré de la taille tu peux accéder aux octets simplement avec des masques et un & bit à bit.

    Suivant ce que tu veux faire il peut être intéressant d'utiliser les wchar du c99 (quand même moyen), les uchar16/uchar32 du c11 (pas largement dispo) ou une bilbiothèque qui gère l'unicode pour toi (iconv, glib, icu suivant les besoins).

  9. #9
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    j'ai surtout l'impression qu'il y a deux encodages successifs

    4456518 = 0x440046 et donc devrait s'écrire "440046" en hexa

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

Discussions similaires

  1. conversion hexa/hexa représenté en ASCII
    Par sone47 dans le forum C++
    Réponses: 1
    Dernier message: 24/08/2010, 17h42
  2. convertion Chaine en hexa puis en entier
    Par taquilla dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/04/2009, 20h01
  3. Réponses: 7
    Dernier message: 04/01/2007, 22h31
  4. Calcul String (valeur Hexa) -> double puis double -> char *
    Par ben_ghost dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 30/07/2006, 21h04
  5. Passage d'une page web à une autre TROP long
    Par minusette dans le forum Web
    Réponses: 16
    Dernier message: 27/10/2005, 17h40

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