With the following code I am trying to output the value of a unit64_t
variable using printf()
. Compiling the code with gcc, returns the following warning:
warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘uint64_t’ [-Wformat=]
The code:
#include <stdio.h>
#include <stdint.h>
int main ()
{
uint64_t val = 0x1234567890abcdef;
printf("val = 0x%x\n", val);
return 0;
}
The output:
val = 0x90abcdef
Expected output:
val = 0x1234567890abcdef
How can I output a 64bit value as a hexadecimal integer using printf()
? The x
specifier seems to be wrong in this case.
Edit: Use printf("val = 0x%" PRIx64 "\n", val);
instead.
Try printf("val = 0x%llx\n", val);
. See the printf manpage:
ll (ell-ell). A following integer conversion corresponds to a long long int or unsigned long long int argument, or a following n conversion corresponds to a pointer to a long long int argument.
Edit: Even better is what @M_Oehm wrote: There is a specific macro for that, because unit64_t
is not always a unsigned long long
: PRIx64
see also this stackoverflow answer
Source: Stackoverflow.com