convertir une string en sa valeur decimal en code ascii ?

Le
dnanar
Bonjour,


j' ai une question simple: comment convertir un caractère appartenant à
une std::string en une variable de type int contenant le code du
caractère en ASCII ? Ou du moins, existe une fonction prefaite en C++ ?




Merci d' avance/
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Etienne Rousee
Le #280375
"dnanar"
Bonjour,


j' ai une question simple: comment convertir un caractère appartenant à
une std::string en une variable de type int contenant le code du
caractère en ASCII ? Ou du moins, existe une fonction prefaite en C++ ?


string chaine = "123456";
int entier;

entier = chaine[2]; // par exemple

//et on a 51 dans entier.

Plus clairement, un caractère ou son code ASCII, pour le C++ (et pour le C),
c'est la même chose. Seul l'humain voit une différence.

--

Etienne

dnanar
Le #280374

string chaine = "123456";
int entier;

entier = chaine[2]; // par exemple

//et on a 51 dans entier.

Plus clairement, un caractère ou son code ASCII, pour le C++ (et pour le C),
c'est la même chose. Seul l'humain voit une différence.




Ok, merci pour cette reponse claire et precise :)

James Kanze
Le #280043
Etienne Rousee wrote:
"dnanar"

j' ai une question simple: comment convertir un caractère
appartenant à une std::string en une variable de type int
contenant le code du caractère en ASCII ? Ou du moins, existe
une fonction prefaite en C++ ?



string chaine = "123456";
int entier;


entier = chaine[2]; // par exemple


//et on a 51 dans entier.


Attention quand même. Ce qu'on a est le code machine -- si c'est
souvent un code à base d'ASCII (parce que l'ASCII pûr est devenu
rarissime), ce n'est pas garantie -- les gros IBM, par exemple,
continue à se servir d'EBCDIC, où l'encodage du caractère '3'
est 243, et non 51.

Aussi, et ce qui risque d'être d'avantage un problème (au moins
de travailler sur des mainframes), c'est que ceci ne marche que
pour les caractères de base du langage. Pour les autres, bien
trop souvent, on se trouvera avec une valeur négative. En
général, quand on passe de char à int, il vaut mieux passer par
un unsigned char entre les deux :

entier = static_cast< unsigned char >( chaine[ 2 ] ) ;

On est toujours à la merci de l'encodage du système, mais au
moins, on a la valeur du caractère dans cet encodage (à
condition qu'il ne se sert que des codes simple -- en France, la
seule exception courante, c'est du UTF-8, je crois).

Plus clairement, un caractère ou son code ASCII, pour le C++
(et pour le C), c'est la même chose. Seul l'humain voit une
différence.


Plus précisement, le C et le C++ n'ont pas vraiment le concepte
du caractère -- les types char, unsigned char et signed char
sont en fait des petits entiers. Ensuite, c'est l'interprétation
qu'on donne à ces entiers qui fait la différence. L'ASCII n'est
pas garanti, et c'est même devenu extrèmement rare -- dans la
pratique, en dehors des mainframes (et probablement aussi encore
en orient), on a soit un encodage ISO 8859-n (avec n soit 1 soit
15 en France), soit UTF-8. Et donc, dans tous les cas, les
valeurs de 0 à 127 qui correspondent à l'encodage ASCII.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Publicité
Poster une réponse
Anonyme