imprimir hexadecimal convertir c gcc 64-bit

convertir - ¿Cómo imprimir un entero de 64 bits como hexadecimal?



imprimir hexadecimal en c (2)

Esta pregunta ya tiene una respuesta aquí:

Con el siguiente código, estoy tratando de generar el valor de una variable unit64_t usando printf() . Compilando el código con gcc, devuelve la siguiente advertencia:

advertencia: el formato ''% x'' espera un argumento de tipo ''unsigned int'', pero el argumento 2 tiene el tipo ''uint64_t'' [-Wformat =]

El código:

#include <stdio.h> #include <stdint.h> int main () { uint64_t val = 0x1234567890abcdef; printf("val = 0x%x/n", val); return 0; }

La salida:

val = 0x90abcdef

Rendimiento esperado:

val = 0x1234567890abcdef

¿Cómo puedo generar un valor de 64 bits como un entero hexadecimal usando printf() ? El especificador x parece estar equivocado en este caso.


Edición: Use printf("val = 0x%" PRIx64 "/n", val); en lugar.

Pruebe con printf("val = 0x%llx/n", val); . Vea la página de manual de printf :

ll (ell-ell). Una siguiente conversión de enteros corresponde a un argumento largo largo int o sin signo largo largo int, o una siguiente n conversión corresponde a un puntero a un argumento largo largo int.

Edit: Aún mejor es lo que escribió @M_Oehm: Hay una macro específica para eso, porque unit64_t no siempre es un unsigned long long : PRIx64 vea también esta respuesta de


La advertencia de su compilador le dice que su especificador de formato no coincide con el tipo de datos que le está pasando.

Intente usar %lx o %llx . Para mayor portabilidad, incluya inttypes.h y use la macro PRIx64 .

Por ejemplo: printf("val = 0x%" PRIx64 "/n", val); (Tenga en cuenta que es concatenación de cadenas)