Dupliqué possible: strong>
C ++ Convertir la chaîne hexagonale en integer signé P>J'essaie de convertir une chaîne hexagonale en Int non signé en C ++. Mon code ressemble à ceci: p>
xxx pré> Le résultat est -65536 cependant. Je ne fais généralement pas trop de programmation C ++, alors toute aide serait appréciée. P>
merci, Jeff p> blockQuote>
5 Réponses :
Vous pouvez faire cela à l'aide d'un Vous pouvez également utiliser le Je pense que la raison que vous obtenez des valeurs négatives est que vous utilisez le spécificateur de format iStringstream code> et du manipulateur code> manipulateur:
std: : oct code> manipulateur pour analyser les valeurs octales. P>
% d code>. est pour les valeurs signées. Utilisation de
% u code> pour les valeurs non signées doit résoudre ce problème. Encore mieux, cependant, serait d'utiliser la bibliothèque de flux, qui en chiffre à la compilation: p>
Est-ce que quelqu'un sait ce qui se passe ici si le numéro n'est pas valide hexagone? Je viens d'essayer des lettres telles que 0XG, et je n'ai pas compris une exception?
@gbmhunter qui fera entrer le flux d'entrer dans un état de défaillance, ce qui ne déclenche pas nécessairement une exception à moins que vous ne leuriez. Vous voudrez peut-être lire sur échecbat code> et flux échecs.
sortie avec int avec % u code> au lieu de
% d code> p> p>
% d code> interprète les bits de l'UINT comme signé. Vous avez besoin de:
La réponse a raison, 0xFFFF0000 est -65536 si interprétée comme signée (le% D Printf Formatter). Vous voulez que votre numéro heex interprété comme non signé (% u ou% x). p>
Eh bien, -65536 est 0xFFFF0000. Si vous utilisez
printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);
Voir également Convertir une chaîne hexadécimale avec "0x" à la signature courte en C ++?