je veux convertir des string qui contient des entiers en hexadécimal en entiers de type int, pouvez-vous m'aider svp? merci.
je veux convertir des string qui contient des entiers en hexadécimal en entiers de type int, pouvez-vous m'aider svp? merci.
Oui, bonjour à toi aussi. Si ça te dérange de mettre un exemple plus concret tu nous le dis surtout. Des fois que ça nous rendrait la tache trop facile...
Donc la méthode pour convertir une string contenant "123" en nombre 123 est la suivante:
Pourquoi val * 10 ? Pour décaler les puissances de 10 (123 c'est 1 * 10 * 10 + 2 * 10 + 3). Et pourquoi string[i] - '0' ? Ben parce que le caractère '2' vaut 50 dans la table ascii. Et pour passer de 50 à 2 il faut enlever 48 qui est justement la valeur ascii du caractère '0' (comme quoi, les coïncidences parfois...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 mettre val à 0 mettre i à 0 tant que string[i] != '\0' faire val=val * 10 + string[i] - '0' i=i+1 fin faire
Donc voilà. Ensuite ben pour adapter cette méthode de chaine décimale (base "10") à une chaine hexadécimale (base "16") te suffit d'un peu d'astuce, d'espièglerie et c'est la vie de Candy.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
exemple:
string s= "4b0";
int y;
y=convert(s);
y=1200;
convert()???
je cherche comment je peut faire la conversation
Merci beaucoup.
J'ai bien compris votre méthode pour les entiers, mais pour l'hexadécimal, j'ai pas compris comment je peut la faire.
Merci beaucoup![]()
Bonsoir.
Si tu peux travailler en C++11, la bibliothèque standard propose la fonction std::stoi(). Cette dernière accepte trois arguments, le dernier étant la base à utiliser pour faire la conversion.
Exemple :
Sinon, l'algorithme de conversion n'est pas très compliqué, une simple recherche sur le net te fournira pléthores d'exemples.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include <iostream> int main(int argc, char *argv[]) { std::cout << std::stoi("4b0", 0, 16) << std::endl; //écrit 1200 sur stdout return 0; }
Bonsoir,
Et pourquoi pas un petit sscanf() ?
taper "sscanf" dans google et il y a plein d'exemples.
Jean-Marie
Preuve que t'as pas vraiment compris le principe général des bases...
De la même façon que "123" font 123. Dans ce cas il faut faire ('1' - '0') * 10 * 10 + ('2' - '0') * 10 + ('3' - '0'); et dans le cas de "4b0" il faut faire ('4' - '0') * 16 * 16 + 11 * 16 + ('0' - '0'). C'est donc exactement la même méthode à part qu'il faut juste faire un test en plus sur string[i] pour détecter le cas de 'a', 'b', 'c', 'd', 'e' ou 'f'...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Voilà ce que j'avais fait, mais ça marche pas, pouvez-vous me corriger svp?
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
26
27
28
29
30
31 string str="4a0"; int val=0; int i=0; while (str[i] != '\0') { switch (str[i]) { case 'a': val=val * 16 + '10' - '0'; break; case 'b': val=val * 16 + '11' - '0'; break; case 'c': val=val * 16 + '12' - '0'; break; case 'd': val=val * 16 + '13' - '0'; break; case 'e': val=val * 16 + '14' - '0'; break; case 'f': val=val * 16 + '15' - '0'; break; default: val=val * 16 + str[i] - '0'; break; } i=i+1;}![]()
Tu comptes faire quoi avec CE CARACTÈRE '10'?![]()
Tu sais si int = ('5' - '0') fonctionne, c'est également le cas de int = ('b' - 'a') // or ('B' - 'A'): zieute la table ASCII pour t'en convaincre
Bon jour, je travail avec c++.
je suivre la méthode de monsieur Sve@r. je faire la soustraction entre le code ASCII de '10' et '0' pour obtient la valeur 10
je faire la soustraction entre le code ASCII de '5' et '0' pour obtient la valeur 5 en entier par exemple j'ai le caractère '5' et je veux transformer en entier
ok, donc pour info la solution de Daïmanu plus haut est valable en C++, l'algorithme proposé par Sve@r n'est pas complet et uniquement une piste de réflexion, plutot que d'essayer de l'implémenter tel quel je t'encourage vivement à essayer de le comprendre, il te donne les grandes lignes
ça n'est pas bon, 10 est composé de 2 caractères, c'est donc une chaine de caractères (char[]en C, ou string en C++), les chaines de caractères sont entre double-quotes " tandis qu'on ne peut mettre qu'un seul caractère entre des simple-quotes 'le code ASCII de '10'
dans la continuité de ce que propose Sve@r, tu pourrais envisager de rajouter (et utiliser) une variable du genre string hexdigits = "0123456789abcdef"; dans ton code, ça risque de t'aider
Dis-lui alors que c'est un problème de logique parce qu'il n'aura jamais 10
- En décimal, ce sera '1' et '0': donc 1 * 10 + 0
- En héxa: 10 c'est 16: 1 * 16 + 0. Ou alors 10 c'est 'A' ... parce qu'on ne sait jamais à quelle base ce nombre est rattachée
Merci beaucoup, j'arrive à corriger ma faute et ça marche très bien avec cette méthode. Merci pour tous qui m'ont aidé
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
26
27
28
29 while (str[i] != '\0') { switch (str[i]) { case 'a': { val=val * 16 + 10;} break; case 'b': { val=val * 16 + 11;} break; case 'c': {val=val * 16 + 12;} break; case 'd': { val=val * 16 + 13;} break; case 'e': { val=val * 16 + 14;} break; case 'f': {val=val * 16 + 15;} break; default: { val=val * 16 + str[i] - '0'; } break; } i=i+1;}![]()
Déjà pas besoin de break sur le default. Sinon tu peux peut-être sortir le *16 puisque c'est quelque chose que tu fais dans tous les cas. Et enfin les instructions initialisation; while (...); increment rentrent très bien dans un for (...)...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager