bonjour
j une variable string= "0xA1", j'aimerai avoir int=0xA1; comment je fait sa merci![]()
bonjour
j une variable string= "0xA1", j'aimerai avoir int=0xA1; comment je fait sa merci![]()
strtol() est une solution
ç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 :
A partir de ça tu peux te créer une petite fonction prenant une string en argument...
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 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 );
j'ai pas compris sa ;il fait qoi
Code : Sélectionner tout - Visualiser dans une fenêtre à part iss.unsetf(std::ios::dec);![]()
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; }
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
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;
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 :
@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...
J'ai bien vu que tu avais fais du cp/cl... Juste que laisser 0x11 = 10, ça le fait pas trop quand même >< !
Oops... j'enlève ce commentaire peccamineux indument recopié... !![]()
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
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.
Partager