J'ai besoin d'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 pour Linux uniquement.
Merci de votre aide.
L'utilisation de Google pour rechercher "Visual Studio printf unsigned __int64" produit cette page comme premier résultat, ce qui indique que vous pouvez utiliser le préfixe I64
, donc le spécificateur de format serait %I64u
.
%llu
est la méthode standard pour imprimer unsigned long long
, ce n'est pas seulement pour Linux, c'est en fait en C99. Le problème est donc 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 long long int non signé; ou qu'un spécificateur de conversion n suivant s'applique à un pointeur sur l'argument long long int.
Je vous recommande d'utiliser PRIu64
format 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 64 bits non signé sur différentes architectures.
Voici un exemple (en C, pas en C++):
#include <stdint.h> /* For uint64_t */
#include <inttypes.h> /* For PRIu64 */
#include <stdio.h> /* For printf */
#include <stdlib.h> /* 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 unsigned long long
selon le compilateur, j'ai vu %llu
et %Lu
. En général, je vous conseille d'utiliser std::cout
et similaire à la place.
Voici un travail autour de la sortie HEX
printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));