Je dois imprimer une valeur ULONGLONG
( unsigned __int64
). Quel format dois-je utiliser dans printf
? J’ai trouvé %llu
dans une autre question mais ils disent que c’est uniquement pour Linux.
Merci de votre aide.
Utiliser Google pour rechercher “Visual Studio print unsigned __int64” produit cette page comme premier résultat, qui indique que vous pouvez utiliser le préfixe I64
, le spécificateur de format sera donc %I64u
.
%llu
est la méthode standard pour imprimer unsigned long long
, ce n’est pas uniquement pour Linux, mais bien en C99. Donc, le problème est en fait d’utiliser un compilateur compatible C99, c’est-à-dire pas Visual Studio.
C99 7.19.6 Fonctions d’ entrée / sortie formatées
ll (ell-ell) Spécifie qu’un spécificateur de conversion d, i, o, u, x ou x suivant s’applique à un argument long long int ou unsigned long long int; ou qu’un spécificateur de conversion n suivant s’applique à un pointeur sur le long argument long int.
Je vous recommande d’utiliser le format PRIu64
spécifié à partir d’une bibliothèque C standard. Il a été conçu pour fournir aux utilisateurs un spécificateur de format pour un entier non signé de 64 bits dans différentes architectures.
Voici un exemple (en C, pas en C ++):
#include /* For uint64_t */ #include /* For PRIu64 */ #include /* For printf */ #include /* For exit status */ int main() { uint64_t n = 1986; printf("And the winning number is.... %" PRIu64 "!\n", n); return EXIT_SUCCESS; }
Printf a différents spécificateurs de format pour les unsigned long long
selon le compilateur, j’ai vu %llu
et %Lu
. En général, je vous conseille d’utiliser plutôt std::cout
et similaire.
Voici un travail autour de la sortie HEX
printf("%08X%08X", static_cast((u64>>32)&0xFFFFFFFF), static_cast (u64)&0xFFFFFFFF));