Convertir la chaîne de caractères ASCII en Décimal et Hexadécimal Représentations
J'ai besoin de convertir une chaîne de caractères ASCII comme... "hello2" en décimal et en hexadécimal de la représentation (une forme numérique, le type n'est pas pertinent). Ainsi, "bonjour" serait : 68 65 6c 6c 6f 32 dans l'HEX. Comment puis-je le faire en C++ sans l'aide d'un géant de l'instruction if?
EDIT: Ok, donc, c'est la solution, je suis allé avec:
int main()
{
string c = "B";
char *cs = new char[c.size() + 1];
std::strcpy ( cs, c.c_str() );
cout << cs << endl;
char a = *cs;
int as = a;
cout << as << endl;
return 0;
}
- vous pouvez implictly convertir n'importe quel char à sa valeur ascii en faisant
char a = 'B'; int as = a;
<- rendements 66 (la valeur ascii) - J'aime ce truc. Ma seule question est maintenant de savoir, comment puis-je convertir une chaîne de cette façon? Je suppose que la question est vraiment, comment puis-je assimiler d'un seul élément d'une chaîne de "a"?
- Vous pouvez le faire dans une boucle for, caractère par caractère.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser printf() pour écrire le résultat sur la sortie standard ou vous pouvez utiliser sprintf /snprintf pour écrire le résultat dans une chaîne de caractères. La clé ici est l' %X dans la chaîne de format.
Si vous traitez avec un C++ std::string, vous pouvez utiliser la chaîne de c_str() méthode pour donner un C tableau de caractères.
Plus qu'à l'imprimer dans l'hexagone, quelque chose comme:
Les Chances sont que vous aurez envie de régler la précision et la largeur de toujours donner 2 chiffres et tels, mais l'idée générale reste la même. Personnellement, si je devais le faire, je serais probablement utiliser
printf("%.2x");
, comme il le fait la bonne chose avec beaucoup moins de tracas.Une chaîne de caractères est juste un tableau de
char
s, de sorte que tous vous avez besoin à faire est de boucle de0
àstrlen(str)-1
, et l'utilisationprintf()
ou quelque chose de similaire pour le format de chaque caractère décimal/hexadécimal.std::string
. Comme d'autres l'ont souligné, à l'aide deprintf()
est beaucoup moins détaillé que C++ flux de mise en forme.operator<<
est surchargé, et vous avez besoin de la surcharge qui prend unint
(oushort
,long
, etc.) pour lehex
drapeau d'avoir un effet (c'est à dire, la surcharge pourchar
ignore lahex
drapeau).