elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  hexadecimal de 2 bytes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: hexadecimal de 2 bytes  (Leído 2,515 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
hexadecimal de 2 bytes
« en: 9 Abril 2014, 23:18 pm »

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".

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char convertirHexadecimal(int residuo);
  6.  
  7. int main()
  8. {
  9.    char num_hex,*cadena,c[2],*hexadecimal;
  10.    int numero = 33,cociente,residuo,i;
  11.    cadena = calloc(12,sizeof(char));
  12.    for(cociente = numero;cociente > 0;cociente/=16)
  13.    {
  14.        residuo = cociente % 16;
  15.        num_hex = convertirHexadecimal(residuo);
  16.        sprintf(c,"%c",num_hex);
  17.        strcat(cadena,c);
  18.    }
  19.    strrev(cadena);
  20.    printf("[%s]\n",cadena);
  21.    return 0;
  22. }
  23.  
  24. char convertirHexadecimal(int residuo)
  25. {
  26.    char letra;
  27.    switch(residuo)
  28.    {
  29.        case 10:
  30.           letra = 'A';
  31.           break;
  32.        case 11:
  33.           letra = 'B';
  34.           break;
  35.        case 12:
  36.           letra = 'C';
  37.           break;
  38.        case 13:
  39.           letra = 'D';
  40.           break;
  41.        case 14:
  42.           letra = 'E';
  43.           break;
  44.        case 15:
  45.           letra = 'F';
  46.           break;
  47.        default:
  48.           letra = '0' + residuo;
  49.    }
  50.    return letra;
  51. }
  52.  



En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: hexadecimal de 2 bytes
« Respuesta #1 en: 10 Abril 2014, 01:21 am »

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:
Código
  1. for(cociente = numero;cociente > 0;cociente/=16){
  2.   residuo = cociente % 16;
  3.   num_hex = convertirHexadecimal(residuo);
  4.   sprintf(c,"%c",num_hex);
  5.   strcat(cadena,c);
  6. }
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   printf("%d %x %04x\n", 33, 33, 33); /* Imprime 33 21 0021 */
  7.  
  8.   return EXIT_SUCCESS;
  9. }
Y si necesitas que la salida se almacene en una cadena/archivo puedes utilizar sprintf/fprintf.

Un saludo


En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
sumarle bytes a un exe « 1 2 »
Programación Visual Basic
Tengu 11 3,543 Último mensaje 29 Julio 2007, 21:37 pm
por karmany
Bytes Array
Programación Visual Basic
BlackZeroX 3 2,835 Último mensaje 22 Octubre 2009, 04:36 am
por BlackZeroX
Add PE bytes v0.1.1
Ingeniería Inversa
karmany 7 5,480 Último mensaje 29 Octubre 2009, 23:31 pm
por ThunderCls
Add PE bytes v0.1.1 « 1 2 »
Programación General
karmany 11 13,620 Último mensaje 21 Enero 2014, 12:04 pm
por magicboiz
Trabajar con bytes?
Programación C/C++
Sanlegas 1 3,324 Último mensaje 3 Septiembre 2010, 19:47 pm
por [L]ord [R]NA
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines