6
votes

Corde hexagonale C ++ à UNSIGNED INT

Dupliqué possible:
C ++ Convertir la chaîne hexagonale en integer signé

J'essaie de convertir une chaîne hexagonale en Int non signé en C ++. Mon code ressemble à ceci: xxx

Le résultat est -65536 cependant. Je ne fais généralement pas trop de programmation C ++, alors toute aide serait appréciée.

merci, Jeff


5 Réponses :


24
votes

Vous pouvez faire cela à l'aide d'un iStringstream et du manipulateur manipulateur: xxx

Vous pouvez également utiliser le std: : oct manipulateur pour analyser les valeurs octales.

Je pense que la raison que vous obtenez des valeurs négatives est que vous utilisez le spécificateur de format % d . est pour les valeurs signées. Utilisation de % u 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: xxx


2 commentaires

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 et flux échecs.



6
votes

sortie avec int avec % u au lieu de % d


0 commentaires

3
votes

% d interprète les bits de l'UINT comme signé. Vous avez besoin de: xxx


0 commentaires

3
votes

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).


0 commentaires

4
votes

Eh bien, -65536 est 0xFFFF0000. Si vous utilisez

printf("\nstring=%s, decimalValue=%u",hex.c_str(),decimalValue);


0 commentaires