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 :

string to hexa


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Par défaut string to hexa
    bonjour
    j une variable string= "0xA1", j'aimerai avoir int=0xA1; comment je fait sa merci

  2. #2
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    strtol() est une solution

  3. #3
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    ça c'est une solution en C pour une "C string".
    Pour une solution C++, prenant une string C++ en entrée voir la FAQ C++ nom de nom !
    http://cpp.developpez.com/faq/cpp/?p...RINGS_strtonum

    Par exemple :
    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
     
    #include <iostream>
     
    #include <sstream>
     
    int main()
    {
        // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( "0x11" );
     
        //pour utiliser le préfixe de la base (ici "0x")
       //une chaine commençant par "0x" ou "0X" sera interprétée comme hexa
       //une chaine commençant simplement par "0" sera interprétée en  octal
       //les autres chaines seront traitées comme décimales
        iss.unsetf(std::ios::dec);
        iss.unsetf(std::ios::oct);
        iss.unsetf(std::ios::hex);
     
        // convertir en un int
     
        int nombre;
     
        iss >> nombre;
        std::cout << nombre;
    }
    A partir de ça tu peux te créer une petite fonction prenant une string en argument...

    A noter que tu peux initialiser bien sûr le istringstream avec une variable string, les deux premières lignes pourraient être aussi aussi bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string s("0x11");
     
        // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( s );

  4. #4
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Citation Envoyé par ptyxs Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
        std::istringstream iss( "0x11" );
    ...
        iss >> nombre; // nombre vaut 10
    ...
    hum...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Par défaut
    j'ai pas compris sa ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       iss.unsetf(std::ios::dec);
    il fait qoi

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    unsetf / setf permettent de jouer avec les drapeaux de configuration du flux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iostream>
    #include <sstream>
     
    int main()
    {
        // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( "0xa" ); // ou iss("a")
        iss.setf(std::ios::hex, std::ios::basefield );
        int nombre(0);
        iss >> nombre; // nombre vaut 10
        std::cout << nombre;
     
        return 0;
    }

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    sinon la réponse classique c'est pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::string abc = "0xa5";
    std::stringstream convert ( abc );
     
    int i;
    convert >> std::hex >> i;
    ??

  8. #8
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Citation Envoyé par Lavock Voir le message
    hum...
    A noter que ce qui précède est ce qui figure dans notre FAQ C++
    http://www.developpez.net/forums/d84...a/#post4830502
    J'avais pris soin de préciser ensuite ceci :

    Citation Envoyé par ptyxs Voir le message
    A noter que tu peux initialiser bien sûr le istringstream avec une variable string, les deux premières lignes pourraient être aussi aussi bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string s("0x11");
     
        // créer un flux à partir de la chaîne à convertir
        std::istringstream iss( s );
    @nikko34 & sali lala
    En ce qui concerne les unsetf : comme je l'ai indiqué brièvement dans les commentaires du programme, les ajouter tous les trois, cela permet d'interpréter directement les chaines - sans avoir besoin d'introduire des manipulateurs à chaque fois - en se fondant sur leur préfixe (préfixes 0x, 0X pour hexa, simple préfixe 0 pour octal et décimal pour toutes les autres chaines numériques(sans préfixe)).

    On peut trouver cette technique dans Bjarne Stoustrup Programming : Principles and Practise Using C++, section 11.2.2.

    Elle est utile si (et seulement si) tu es sûr que les données numériques sous forme de chaine en entrée sont toujours correctement préfixées (comme c'était le cas dans le problème initial). Elle est nécessaire si ces données préfixées sont tantôt hexa, tantôt décimales (et/ou tantôt octales).

    Si les données de ton programme sont toujours en hexa la solution nikko34 est évidemment possible (et elle est même nécessaire dans ce cas si les chaines représentant des nombres en hexa données en entrée sont parfois non préfixées par 0x ou 0X).
    A toi de voir...

  9. #9
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    J'ai bien vu que tu avais fais du cp/cl... Juste que laisser 0x11 = 10, ça le fait pas trop quand même >< !

  10. #10
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Oops... j'enlève ce commentaire peccamineux indument recopié... !

  11. #11
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    A noter qu'en plus des possibilités mentionnées plus haut, il existe des solutions "ready made" dans boost/lexical_cast :
    http://www.boost.org/doc/libs/1_33_1...xical_cast.htm

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Par défaut
    merci beaucoup a vous tous

  13. #13
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Contrairement à ma première impression, boost/lexical_cast ne semble pas pouvoir résoudre ton problème, cf. :

    http://groups.google.com/group/comp....5afee27bef4cde
    seules les solutions via istringstream sont donc à retenir, apparemment.

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

Discussions similaires

  1. traduire chaine string en hexa
    Par STEPH42160 dans le forum Visual C++
    Réponses: 3
    Dernier message: 20/09/2006, 11h32
  2. 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
  3. Conversion String en Hexa ("1F") vers byte
    Par ducseb dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2006, 20h03
  4. string en hexa (j'ai lu la faq :P )
    Par NorthernLights dans le forum C++
    Réponses: 2
    Dernier message: 14/02/2006, 14h53
  5. Conversion d'un string en hexa
    Par marsupilami34 dans le forum Langage
    Réponses: 3
    Dernier message: 07/07/2005, 09h13

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