2010-08-24 5 views

Répondre

2
long long unsigned n = 0x000000000076fba1; 
printf("%0x0.16llx\n", n); 
+1

Avez-vous dire printf ("0x% 016llx \ n", n)? – joast

+0

Eh bien je l'ai écrit maintenant, mais ils sont à peu près les mêmes après avoir lu les documents pour ce cas –

+0

Oui, l'un ou l'autre fonctionnera dans ce cas. Remarque: Si vous utilisez Windows, vous devrez peut-être utiliser quelque chose comme printf ("% 0x016I64 \ n", n). Je ne me souviens pas quand MS a ajouté le support de "ll" comme spécificateur de format. – joast

0
#ifdef __int64 
printf("%#018I64x\n", n); /* for MSVC+MinGW */ 
#else 
printf("%#018llx\n", n); /* other compiler with "unsigned long long" support */ 
#endif 
+0

Il y a quelques pièges avec "#" dans le format. Vous devez tenir compte de "0x" étant ajouté à la sortie de sorte que vous devez utiliser 18 au lieu de 16 pour la largeur. De plus, une valeur 0 (zéro) sera émise sans le premier "0x" (la sortie sera "0000000000000000" si 16 est utilisé pour la largeur). – joast

+0

vous avez raison, je me corrige 16 -> 18 – user411313

+1

Ne pas utiliser la largeur, utilisez la précision. '"% #. 16 "PRIu64" x \ n "'. Et surtout, ne jetez pas de code avec de telles merdes '# ifdef 'hideuses. –

Questions connexes