printf() de mise en forme pour hex
C'est plus une curieuse requête que d'une question importante, mais pourquoi lors de l'impression d'hex à 8 chiffres avec des zéros, est-ce %#08X
affiche Pas le même résultat que 0x%08X
?
Lorsque j'essaie d'utiliser l'ancien, le 08
mise en forme de drapeau est supprimé, et il ne fonctionne pas avec juste 8
.
Fois que j'étais juste curieux.
- Voulez-vous dire
0x%.8X
? Qui mènera-remplir avec des zéros. (le0x
est juste un préambule, mais votre probablement déjà au courant de cela).
Vous devez vous connecter pour publier un commentaire.
La
#
partie vous donne un0x
dans la chaîne de sortie. Le0
et lax
comte contre votre "8" caractères répertoriés dans le08
partie. Vous avez besoin de demander de 10 caractères si vous voulez qu'il soit de la même.Également changer le cas de
x
, affecte le boîtier de la sortie des personnages.14F
?i = 0;
, les versions à l'aide de%#
ne comprennent pas les0x
préfixe.printf_s
est un MSDN fonction où que cette réponse est spécifiquement appelprintf
... je ne suis pas vraiment sûr si tous les mêmes drapeaux/options de format sont pris en charge, mais je serais réticent à l'idée de faire aucune hypothèse sur ce point.0
à la fin?Le "0x" compte vers les huit caractères. Vous avez besoin
"%#010x"
.Noter que
#
ne pas ajouter le 0x 0 - le résultat sera0000000000
- donc, vous avez probablement fait faut juste utiliser"0x%08x"
de toute façon.La
%#08X
de conversion doit précéder la valeur avec0X
; qui est requis par la norme. Il n'y a aucune preuve dans la norme que le#
doit modifier le comportement de la08
partie de la spécification, sauf que le0X
préfixe est compté comme une partie de la longueur (de sorte que vous pouvez/devez utiliser%#010X
. Si, comme moi, vous aimez votre hex présenté comme0x1234CDEF
, alors vous devez utiliser0x%08X
pour obtenir le résultat souhaité. Vous pouvez utiliser%#.8X
et qui devrait également insérer des zéros à gauche.Essayer de variations sur le code suivant:
Sur une RHEL 5 de la machine, et également sur Mac OS X (10.7.5), la sortie a été:
Je suis un peu surpris du traitement de l'0; je ne suis pas clair pourquoi la
0X
préfixe est omis, mais avec deux systèmes distincts de le faire, il doit être la norme. Il confirme mes préjugés à l'encontre de la#
option.Le traitement de zéro est conforme à la norme.
(Italiques ajoutés.)