hexadecimal - int to hex converter
¿Cómo puedo convertir un entero a una cadena hexadecimal en C? (6)
¿Cómo puedo convertir un entero a una cadena hexadecimal en C?
Ejemplo: El entero 50
se convertiría a la cadena hexadecimal "32"
o "0x32"
.
Convertir un entero a una cadena también involucra una matriz de caracteres o administración de memoria.
Para manejar esa parte para tales matrices cortas, el código podría usar un literal compuesto , desde C99, para crear un espacio de matriz, sobre la marcha . La cadena es válida hasta el final del bloque.
#define UNS_HEX_STR_SIZE ((sizeof (unsigned)*CHAR_BIT + 3)/4 + 1)
// compound literal v--------------------------v
#define U2HS(x) unsigned_to_hex_string((x), (char[UNS_HEX_STR_SIZE]) {0}, UNS_HEX_STR_SIZE)
char *unsigned_to_hex_string(unsigned x, char *dest, size_t size) {
snprintf(dest, size, "%X", x);
return dest;
}
int main(void) {
// 3 array are formed v v v
printf("%s %s %s/n", U2HS(UINT_MAX), U2HS(0), U2HS(0x12345678));
char *hs = U2HS(rand());
puts(hs);
// `hs` is valid until the end of the block
}
Salida
FFFFFFFF 0 12345678
5851F42D
El siguiente código toma un número entero y crea una cadena en formato hexadecimal:
int num = 32424;
char hex[5];
sprintf(hex, "%x", num);
puts(hex);
da
7ea8
Es interesante que estas respuestas utilicen printf
como si fuera un hecho. printf
convierte el entero en un valor de cadena hexadecimal.
//*************************************************************
// void prntnum(unsigned long n, int base, char sign, char *outbuf)
// unsigned long num = number to be printed
// int base = number base for conversion; decimal=10,hex=16
// char sign = signed or unsigned output
// char *outbuf = buffer to hold the output number
//*************************************************************
void prntnum(unsigned long n, int base, char sign, char *outbuf)
{
int i = 12;
int j = 0;
do{
outbuf[i] = "0123456789ABCDEF"[num % base];
i--;
n = num/base;
}while( num > 0);
if(sign != '' ''){
outbuf[0] = sign;
++j;
}
while( ++i < 13){
outbuf[j++] = outbuf[i];
}
outbuf[j] = 0;
}
Este código
int a = 5;
printf("%x/n", a);
huellas dactilares
5
Este código
int a = 5;
printf("0x%x/n", a);
huellas dactilares
0x5
Este código
int a = 89778116;
printf("%x/n", a);
huellas dactilares
559e7c4
Si capitaliza la x en el formato, escribe en mayúscula el valor hexadecimal:
int a = 89778116;
printf("%X/n", a);
huellas dactilares
559E7C4
Si desea imprimir punteros, utilice el especificador de formato p:
char* str = "foo";
printf("0x%p/n", str);
huellas dactilares
0x01275744
Hice una librairy para hacer conversión Hexadecimal / Decimal sin el uso de stdio.h
. Muy simple de usar:
char* dechex (int dec);
Esto usará calloc()
para devolver un puntero a una cadena hexadecimal, de esta manera la cantidad de memoria utilizada se optimiza, así que no olvides usar free()
Aquí el enlace en github: https://github.com/kevmuret/libhex/
Usualmente con printf
(o uno de sus primos) usando el especificador de formato %x
.