convertir - ¿Cómo imprimir un entero de 64 bits como hexadecimal?
imprimir hexadecimal en c (2)
Esta pregunta ya tiene una respuesta aquí:
- Cómo imprimir un tipo int64_t en C 6 respuestas
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)