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
Partager