Avec le code suivant, j'essaie de générer la valeur d'une variable unit64_t
À l'aide de printf()
. La compilation du code avec gcc renvoie l'avertissement suivant:
warning: le format '% x' attend un argument de type 'unsigned int', mais l'argument 2 a le type 'uint64_t' [-Wformat =]
Le code:
#include <stdio.h>
#include <stdint.h>
int main ()
{
uint64_t val = 0x1234567890abcdef;
printf("val = 0x%x\n", val);
return 0;
}
Le résultat:
val = 0x90abcdef
Production attendue:
val = 0x1234567890abcdef
Comment puis-je générer une valeur 64 bits sous forme d'entier hexadécimal à l'aide de printf()
? Le spécificateur x
semble être faux dans ce cas.
L’avertissement de votre compilateur vous indique que votre spécificateur de format ne correspond pas au type de données que vous lui transmettez.
Essayez d’utiliser %lx
Ou %llx
. Pour plus de portabilité, incluez inttypes.h
Et utilisez la macro PRIx64
.
Par exemple: printf("val = 0x%" PRIx64 "\n", val);
(notez qu'il s'agit d'une concaténation de chaîne)
Edit: Utilisez plutôt printf("val = 0x%" PRIx64 "\n", val);
.
Essayez printf("val = 0x%llx\n", val);
. Voir le printf manpage :
ll (ell-ell). Une conversion entière suivante correspond à un argument long long int ou unsigned long long int, ou une conversion n suivante correspond à un pointeur sur un argument long long int.
Edit: Encore mieux est ce que @M_Oehm a écrit: Il existe une macro spécifique pour cela, car unit64_t
n'est pas toujours un unsigned long long
: PRIx64
voir aussi cette réponse stackoverflow