hexadecimal de 2 bytes

Iniciado por m@o_614, 9 Abril 2014, 23:18 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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;
}



rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language