Saludos
tengo un codigo que convierte un numero decimal en hexadecimal(siempre tiene que ser decimal-hexadecimal), el programa funciona bien el problema es que una vez que tengo el número hexa tengo que hacer que sea de dos bytes, o sea vendrían siendo 4 digitos como por ejemplo
numero decimal hexadecimal hexadecimal 2 bytes
33 21 0021
y no se como concatenarle los dos ceros al principio, pense en usar un strcat pero no funciono, creaba otra variable *cadena, y despues de asignarle memoria la inicializaba con: "0", y después le concatenaba la cadena "21" para que me quedara "021".
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char convertirHexadecimal(int residuo);
int main()
{
char num_hex,*cadena,c[2],*hexadecimal;
int numero = 33,cociente,residuo,i;
cadena = calloc(12,sizeof(char));
for(cociente = numero;cociente > 0;cociente/=16)
{
residuo = cociente % 16;
num_hex = convertirHexadecimal(residuo);
sprintf(c,"%c",num_hex);
strcat(cadena,c);
}
strrev(cadena);
printf("[%s]\n",cadena);
return 0;
}
char convertirHexadecimal(int residuo)
{
char letra;
switch(residuo)
{
case 10:
letra = 'A';
break;
case 11:
letra = 'B';
break;
case 12:
letra = 'C';
break;
case 13:
letra = 'D';
break;
case 14:
letra = 'E';
break;
case 15:
letra = 'F';
break;
default:
letra = '0' + residuo;
}
return letra;
}
Ya te había comentado sobre varios errores en tus programas pero por alguna razón simplemente no haces caso. La copia de caracteres mediante sprintf y strcat:
for(cociente = numero;cociente > 0;cociente/=16){
residuo = cociente % 16;
num_hex = convertirHexadecimal(residuo);
sprintf(c,"%c",num_hex);
strcat(cadena,c);
}
Sigue ahí cuando hay formas mas simples de hacerlo, te indique cuales en uno de tus otros temas.
En cuanto a imprimir un numero hexadecimal con al menos cuatro dígitos (relleno de ceros a la izquierda de ser necesario) basta con utilizar printf con el especificador "%04x". Un ejemplo sencillo que genera la salida que mencionas es:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%d %x %04x\n", 33, 33, 33); /* Imprime 33 21 0021 */
return EXIT_SUCCESS;
}
Y si necesitas que la salida se almacene en una cadena/archivo puedes utilizar sprintf/fprintf.
Un saludo