Autor Tema: hexadecimal a string  (Leído 1613 veces)

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

Desconectado Hebert

  • PIC10
  • *
  • Mensajes: 18
hexadecimal a string
« en: 01 de Agosto de 2011, 21:22:27 »
Aclaro que no utilizo pic puse el tema aca porque creo que mi problema se de programacion. Ya ahora va la cosa

tengo una variable de tipo hexadecimal... algo asi

int dato_hex=0xFA;

la cual veo por la uart correctamente si pongo esto:

printf("\r\n %X",dato_hex);

y en el hiperterminal veo FA lo cual esta bien

ahora lo que quiero hacer es convertir ese "FA" para que lo pueda ver como un string... y lo pueda visualizar asi

printf("\r\n %s",dato_char); // y con esto poder ver el "FA"pero ya como un string no como un numero hexadecimal
he intentado con sprintf y no funciona

alguna sugerencia??

PD:si no me explique bien disculpen.

Saludos al foro!!






Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: hexadecimal a string
« Respuesta #1 en: 01 de Agosto de 2011, 22:41:24 »
Hola Amigo, yo haría lo siguiente, descompongo el dato hexa y lo convierto a caracter en dos variables

Código: [Seleccionar]
const int tabla_hexa[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int respaldo1;
int respaldo2;
int dato_hexa;

dato_hexa = 0xfa;

respaldo1 = dato_hexa;
respaldo1 = swap(respaldo1) & 0x0f;
respaldo1 = tabla_hexa[respaldo1];

respaldo2 = dato_hexa;
respaldo2 = respaldo2 & 0x0f;
respaldo2 = tabla_hexa[respaldo2];

printf("\r\n %s",respaldo1,respaldo2)

Saludos.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: hexadecimal a string
« Respuesta #2 en: 01 de Agosto de 2011, 23:50:39 »
Hola, muy buena idea Diego, yo la tengo implementada así:

Código: C
  1. static int8 const Digits[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  2.  
  3. void hexa_byte( int8 Val, char *SRet )
  4. {
  5.   SRet[ 0 ] = Digits[ Val >> 4  ];
  6.   SRet[ 1 ] = Digits[ Val & 0xF ];
  7.   SRet[ 2 ] = '\0';
  8. }


El requeriemiento es que SRet al menos tenga 3 bytes.

Saludos !

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: hexadecimal a string
« Respuesta #3 en: 02 de Agosto de 2011, 03:55:05 »
También así:
Código: C
  1. for(i=0; i<2; i++)
  2.     dato_char[i] = (dato_hex >> (i? 0: 4)) & 15, dato_char[i] += dato_char[i]<10? 48: 55;
  3. dato_char[2] = 0;
  4. printf("\r\n %s",dato_char);
Creo que los métodos de Diego y Richi son mas claros :lol:
@fabianjsm is on twitter

Desconectado Hebert

  • PIC10
  • *
  • Mensajes: 18
Re: hexadecimal a string
« Respuesta #4 en: 02 de Agosto de 2011, 12:26:17 »
 :-/ :-/

que mas decir que gracias a los que respondieron.... lo hice con la solucion de fabianjsm  que fue la que mas entendi se agradece nuevamente a la comunidad de este foro

Saludos!!

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: hexadecimal a string
« Respuesta #5 en: 02 de Agosto de 2011, 12:48:24 »
Hola, es tuya la decisión. Te explico brevemente como funciona la solución que te pase. Un byte o int8 puede tener un valor de 0 a 255, es decir 256 posibilidades. Este número es igual 16 * 16 que justamente son los nibble alto y nibble bajo  que formar el byte. La primera operación:

Código: C
  1. SRet[ 0 ] = Digits[ Val >> 4  ];

Lo que hace es obtener el nibble mas alto, diviendo el valor por 16 ( el desplazamiento >> 4 hace eso ), eso le da un valor entre 0 o 15 que termina siendo el índice en al array donde obtiene el digito.

Código: C
  1. SRet[ 1 ] = Digits[ Val & 0xF ];

La segunda operación hace lo mismo pero con el nibble mas bajo, por eso al byte lo enmascara con 0x0F, que le le dan los 4 bits menos siginificativos, y lo usa como índice del array de la misma manera que lo explicado anteriormente.
La tercera linea solo fuerza a que el string destino sea un C string colocandole el 0 como terminador.

Saludos !


 

anything