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 d'entiers non signés en caractères


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut Conversion d'entiers non signés en caractères
    Bonsoir,
    je souhaite convertir un nombre de type WORD (ie 16bits non signé) en une chaine de caractères en C++. J utilise actuellement la fonction sprintf mais il y a un souci lorsque la chaine débute par un 0.
    Par exemple, lorsque je veux convertir 0x0020, le résultat écrit dans le buffer sera 20 et non pas 0020.

    Alors, j ai pensé utiliser la fonction itoa, mais celle-ci génère aussi un petit problème.Par exemple, itoa(125,buffer,16) me retourne "7d" dans le buffer et non "7D". (d et D n'ont pas le même caractère ASCII).

    Est ce que quelqu'un connaitrait une autre méthode?

    Merci pour votre aide

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    j'utilise une fonction perso (inspirée de la FAQ) pour faire ça:
    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
    #include <sstream>
    #include <string>
     
    std::string Int2Str(const int a, const int nbChar)
    {
        std::ostringstream oss;
        oss << a;
        std::string strRet = oss.str();
        if ( strRet.size() > nbChar )
            return strRet.substr(0, nbChar);
     
        while ( strRet.size() < nbChar )
            strRet = "0" + strRet;
     
        return strRet;
    }
    Tu dois pouvoir t'en sortir en l'adaptant à ton cas particulier.
    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Voici deux codes équivalents qui devraient faire ce que tu veux:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <stdio.h>
     
    ...
     
    sprintf("%04X", val);
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <sstream>
    #include <iomanip>
     
    ...
     
    std::ostringstream oss;
    oss << std::setw(4) << std::setfill('0') << std::hex << std::uppercase << val;
    std::string s = oss.str();
    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.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    OK,
    merci pour ta réponse.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/04/2008, 23h28
  2. Des entiers non signés
    Par Gruik dans le forum C
    Réponses: 14
    Dernier message: 13/12/2006, 22h17
  3. Réponses: 9
    Dernier message: 12/10/2006, 00h36
  4. [Fortran 90] Type entier non signé
    Par nnath dans le forum Fortran
    Réponses: 2
    Dernier message: 17/07/2006, 00h21
  5. Déclarer un entier non-signé [PHP]
    Par Bouillou dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 16h46

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