Comment convertir une chaîne de valeurs hexadécimales en chaîne?
Dire que j'ai une chaîne de caractères comme:
string hex = "48656c6c6f";
Où tous les deux caractères correspondent à la représentation hexadécimale de leur ASCII, la valeur, par exemple:
0x48 0x65 0x6c 0x6c 0x6f = "Hello"
Alors, comment puis-je obtenir "hello"
de "48656c6c6f"
sans avoir à créer une lookup table ASCII? atoi()
de toute évidence ne fonctionne pas ici.
source d'informationauteur NullUserException
Vous devez vous connecter pour publier un commentaire.
Chiffres hexadécimaux sont très faciles à convertir en binaire:
Donc pour l'ensemble de la chaîne ressemble à quelque chose comme ceci:
Vous pourriez raisonnablement se demander pourquoi l'un serait-il le faire de cette façon, quand il y a
strtol
et son utilisation est beaucoup moins de code (comme dans James Curran de la réponse). Ainsi, cette approche est plein décimal ordre de grandeur plus lent, car il copie sur deux octets morceau (éventuellement l'allocation de mémoire dans la mémoire de le faire) et invoque ensuite un texte d'ordre général-à-numéro de routine de conversion qui ne peut pas être écrit de manière aussi efficace que l'spécialisées code ci-dessus. Christian approche (à l'aide de istringstream) est cinq fois plus lent que que. Voici un indice de référence de la parcelle - vous pouvez faire la différence, même avec un petit bloc de données à décoder, et il devient flagrant que les différences sont de plus en plus. (Notez que les deux axes sont sur une échelle log.)Est-ce l'optimisation prématurée? L'enfer n'. C'est le genre d'opération qui obtient poussé dans une routine de bibliothèque, oublié, puis des milliers de fois par seconde. Il a besoin de crier. J'ai travaillé sur un projet de quelques années en arrière, ça fait très forte utilisation de SHA1 les sommes de contrôle interne -- nous avons eu 10 à 20% de la vitesse sur les opérations courantes en les stockant que les matières premières octets au lieu de l'hexagone, la conversion de seulement lorsque nous en avons eu à les montrer à l'utilisateur -- et c'était avec des fonctions de conversion qui avait déjà été à l'écoute de la mort. On peut honnêtement préfèrent la brièveté de la performance ici, en fonction de ce que la plus grande tâche, mais si oui, pourquoi diable êtes-vous de codage en C++?
Aussi, à partir d'un point de vue pédagogique, je pense qu'il est utile de montrer codée à la main des exemples de ce genre de problème; il n'en révèle davantage sur ce que l'ordinateur a à faire.
Je ne peux pas commenter, mais zwol la solution d'un bug:
est correctement
que l'opérateur de décalage a priorité plus basse que d'ajouter
strtol devrait faire le travail si vous ajoutez
0x
à chaque chiffre hexadécimal paire.