Funcion para pasar de decimal a hexadecimal

¿Me podrías ayudar mandándome el código de una función que reciba un entero y devuelva su mismo valor pero en hexadecimal?
Estoy bastante estancado y no soy capaz de avanzar en mi código sin esa función

2 respuestas

Respuesta
2
para eso lo que puedes utilizar es sprintf() en stdio.h, es una funcion que almacena la salida en un buffer en vez de hacerlo en la pantalla como printf();
char hex[255] = {'\0'};
Sprintf(hex, "%x", entero) // entero es el parametro con el entero almacenado.
//%X lee el entero como un hexadecimal y lo almacena en hex y las variables las pone en minúscula y %X hace lo mismo pero con las variables en mayúscula.
Buenas,
he probado tu código y al depurar el código me hace la conversión perfectamente. El problema es que al intentar meterlo en una variable (de tipo uint32) y ver el resultado en un visor hexadecimal veo que en vez de introducirme el valor de la variable me introduce la dirección de memoria que tiene esa variable, así que aunque me haga bien la conversión no me introduce el valor en registro[3] no avanzando nada... :(
Aqui te paso un pequeño trozo de codigo, toda ayuda me sera muy util. Muchas gracias
uint32 registro[4];
uint32 difTOA;
char hex[255] = {'\0'};
//el valor en decimal dentro de difTOA lo quiero meter en registro[3]... no puedoooo
sprintf(hex,"%X",difTOA);
registro[3] =  (uint32)hex;
Lo que sucede es que los números por defecto siempre se almacenan en el sistema numérico decimal cuando tratas de verlo, claro que a nivel de máquina es un número binario, en teoría lo que debes es mantenerlo como un entero y cdo lo necesites como hexadecimal entonces lo conviertes.
De todas maneras lo que haces no podría funcionar de ninguna forma porque la conversión de un char* a entero se hace a través de la función atoi en stdlib.h, y tiene que ser un número en sistema decimal ya sea float o int.
Deberías decir para qué necesitas los números en formato hexadecimal específicamente, que no puedes trabajarlos normal como un número decimal, porque en realidad en un número de tipo int (cualquiera que sea) no puedes guardarlo en formato decimal. Imagínate que para trabajar en formato binario con los bits de los números y esas cosas, se utilizan los operadores a nivel de bits (and binario &, or binario |, desplazamiento a la izquierda >>, desplazamiento a la derecha <<, el XOR ~, etc), y se le aplican a los enteros tradicionales.
Respuesta

sprintf(Hexadecimal,"%04x",Numero);
strcpy(HByte1,"");
strcpy(HByte2,"");
//printf("El numero entero es: %d y su Hexadecimal es: %s\n",Numero,Hexadecimal);
for(i=0;i<2;i++)
{
HByte1[i]=Hexadecimal[i];
HByte2[i]=Hexadecimal[i+2];
}
Byte1 = (int) strtol(HByte1,NULL,16);
Byte2 = (int) strtol(HByte2,NULL,16);

printf("El numero entero es: %d y su hexadecimal en 2 bytes es %d %d\n",Numero,Byte1,Byte2);

sprintf(Hexadecimal,"%04x",Numero);
strcpy(HByte1,"");
strcpy(HByte2,"");
//printf("El numero entero es: %d y su Hexadecimal es: %s\n",Numero,Hexadecimal);
for(i=0;i<2;i++)
{
HByte1[i]=Hexadecimal[i];
HByte2[i]=Hexadecimal[i+2];
}
Byte1 = (int) strtol(HByte1,NULL,16);
Byte2 = (int) strtol(HByte2,NULL,16);

Printf("El numero entero es: %d y su hexadecimal en 2 bytes es %d %d\n", Numero, Byte1, Byte2);

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas