format printf pour les __int64 non signés sous Windows

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