Question newbie format texte <-> hexa

Résolu
Raphy2145 Messages postés 7 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 4 mars 2005 - 24 févr. 2005 à 19:20
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 10 mars 2005 à 18:27
Bonjour à tous,

Je suis débutant en C++, et c'est pas très glorieux...
Je me tourne vers vous parce que je me galère vraiment sur un point de détail que je n'arrive pas à résoudre, et qui va sûrement vous prendre 2s .

Quelque part dans mon code, je me retrouve avec un char *buffer = "A106B4", et je voudrais récupérer la valeur int qui correspond à cette chaîne de caractères en hexa.

Quelqu'un a une idée ?

Merci

12 réponses

Raphy2145 Messages postés 7 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 4 mars 2005
25 févr. 2005 à 14:02
Ben non justement, dans mon cas je veux récupérer la valeur hexa parce que ma chaîne de caractères représente un hexa, mais elle pourrait représenter un décimal. Et il n'est pas toujours possible de faire la différence (je défie quiconque de me dire si qd j'écris "13", c'est de l'hexa ou du décimal...).
A mon humble avis, c'est pour ça qu'a été créé le 3ème paramètre de strtol ; sinon il n'y serait pas .

En tous cas, merci pour ta réponse, le strtol est une solution qui fonctionne.
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
24 févr. 2005 à 19:50
#include

#include <sstream> // istringstream



int main()

{

using namespace std;



const char *hex_num = "A106B4";

istringstream iss(hex_num);



int num;

if( iss >> hex >> num )

{

cout << hex_num << " = " << num << '\n';

}

}



documentation sur la bibliothèque iostream: http://www.cplusplus.com/ref/iostream/
0
nicooooo1 Messages postés 58 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 4 février 2012
24 févr. 2005 à 22:50
Salut,

ca te paraitra peut etre plus simple :



#include

#include <stdlib.h>



void main()

{

char * buffer = "A106B4";

int valeur= strtol ( buffer, &buffer, 16);

}
0
Raphy2145 Messages postés 7 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 4 mars 2005
25 févr. 2005 à 01:09
Merci, je teste ça demain, et je vous tiens au courant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Raphy2145 Messages postés 7 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 4 mars 2005
25 févr. 2005 à 11:27
Effectivement, la seconde solution me paraît plus abordable, et après test : elle fonctionne !

Merci pour votre aide,
0
nicooooo1 Messages postés 58 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 4 février 2012
25 févr. 2005 à 12:47
ou sinon,



#include

void main()

{

char * buffer = "AB56TZ";

int aaa = (int)buffer;

}
0
Raphy2145 Messages postés 7 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 4 mars 2005
25 févr. 2005 à 12:59
Là par contre j'ai un petit doute... Comment le cast ferait la différence entre un "345678" en décimal et un "345678" en hexa... (s'il n'y a pas de 0x0)?

Merci quand même !
0
nicooooo1 Messages postés 58 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 4 février 2012
25 févr. 2005 à 13:45
re,

un char c forcement en hexa....



oublis po de valider
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 févr. 2005 à 14:37
strtol est bien si tu peux avoir des valeurs signées, sinon, préfère la suivante:

unsigned long plomp;
plomp=strtoul(m_str,NULL,isHexa?16:10);

Magicalement, ++
Magic Nono: l'informagicien!
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
25 févr. 2005 à 20:10
Vous etes quand meme désolant, il n'y a que la solution que j'ai donné
qui fait vraiment partie du langage C++, c'est aussi la plus simple à
comprendre avec en plus le controle d'erreur.

Je ne comprends pas comment on peut preferer la solution C ??

Faire du C avec un compilateur C++ c'est aussi bete que d'acheter la derniere carte 3D pour jouer à tetris.
0
G.rom Messages postés 2 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 9 mars 2005
9 mars 2005 à 19:14
Salut tout le monde !

Effectivement, la solution de steve_clamage est belle et propre, et tres simple :

Celle-ci se resume a :



chaine >> hex >> valeur;



quoi de plus simple !?

Bon, effectivement il faut que chaine soit un istringstream ... ce qui
implique de savoir coder proprement en C++ ... conclusion : apprendre
le C avant le C++ est, à mon avis, une mauvaise idée. (Et je dis ca car
j'en fait chaque jours les frais..)



Et le prochain qui met un .h a iostream !!!


D'ailleurs, steve_clamage, peux-tu nous indiquer quel est le meilleur
moyen de bien coder en C++ (livres, sites web) sans avoir recours aux
vieillissantes fonctions C ..



Bye!
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
10 mars 2005 à 18:27
merci,



Pour les livres, je dirais ceux de B. Stroustrup (le dernier) car ca
reste la référence, il faut aussi regarder du coté des ouvrages ed.
Addison Wesley.



Plus rapide, pour se décrasser et avoir conscience de son niveau, la faq C++:

http://c.developpez.com/faq/cpp/



Pour approfondir (en anglais), question/réponses de gourous:

http://cpptips.hyperformix.com/cpptips.html
0
Rejoignez-nous