TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 05 de Agosto de 2009, 18:19:30

Título: Como convertir un numero hexadecimal a un decimal string
Publicado por: Medusa en 05 de Agosto de 2009, 18:19:30
Hola, alguien me puede decir como puedo convertir un numero hexadecimal a un string decimal ?
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Suky en 05 de Agosto de 2009, 19:59:04
Utilizando la función sprintf, y los parámetros %u o %lu

char String[];
int Num;

sprintf(String,"%u",Num);


Saludos!
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: RedPic en 06 de Agosto de 2009, 03:00:14
Medusa ¿partes de un string hex? ... del estilo de char stringhex[]="F01A"; ... ¿y deseas obtener un string dec? ... del estilo de char stringdec[]="61466"; En caso afirmativo ¿qué longitud tendría el stringhex?



Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Medusa en 06 de Agosto de 2009, 11:36:02
Hola RedPic el dato Hex es de 8bits  :lol:,

Gracias Suky, ya tengo el resultado deseado  :-/  :-/, pero ahora tengo otro problema   :( , quiero comparar tres datos tipo estring con otros tres string pero no logro hacer correctamente, me pueden dar alguna sugerencia.

Aqui esta mi codigo,
Código: [Seleccionar]
char Buffer1[3];
char Buffer2[3];
char Buffer3[3];
char Buffer_EEprom1[3];
char Buffer_EEprom2[3];
char Buffer_EEprom3[3];

sprintf(buffer1,"%u",sec);
sprintf(buffer2,"%u",min);
sprintf(buffer3,"%u",hrs);

for (i = 0; i< 2; i++) Buffer_EEprom1[i] = read_eeprom(210+i);
for (i = 0; i< 2; i++) Buffer_EEprom2[i] = read_eeprom(212+i);
for (i = 0; i< 2; i++) Buffer_EEprom3[i] = read_eeprom(214+i);

if ((!strcmp(Buffer_EEprom1,Buffer1))& (!strcmp(Buffer_EEprom2,Buffer2)) &(!strcmp(Buffer_EEprom3,Buffer3)))
Alarma = 1;
else
        Alarma = 0;

sec,min,hrs so datos que obtengo de un RTC, y los datos con los cuales quiero comparar estan almacenados en la eeprom a partir de la direccion 210
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Suky en 06 de Agosto de 2009, 11:57:10
Debes poner:
Código: C
  1. if ((!strcmp(Buffer_EEprom1,Buffer1))&& (!strcmp(Buffer_EEprom2,Buffer2)) &&(!strcmp(Buffer_EEprom3,Buffer3)))

Saludos!
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Medusa en 06 de Agosto de 2009, 12:30:29
Citar
if ((!strcmp(Buffer_EEprom1,Buffer1))&& (!strcmp(Buffer_EEprom2,Buffer2)) &&(!strcmp(Buffer_EEprom3,Buffer3)))

Hola Suky,

Con esta modificacion tampoco funciona, la cpu salta esta instruccion y no lo ejecuta,


Código: [Seleccionar]
if ((!strcmp(Buffer_EEprom1,Buffer1))&& Pero cuado hago la comorarcion de un solo dato todo funciona OK,



cual podria ser mi error?
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Suky en 06 de Agosto de 2009, 12:55:21
En las conversiones colocalo así:

sprintf(buffer1,"%02u",sec);
sprintf(buffer2,"%02u",min);
sprintf(buffer3,"%02u",hrs);


De esa manera siempre el Buffer quedará: por ejemplo para hrs=2 --> [0,2,\n]

Y si el buffer que almacena los datos recibidos de la memoria queda así, no debería haber problemas  :?

Saludos!
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Medusa en 06 de Agosto de 2009, 13:11:52
  :-/  :-/  :-/ Funciona... gracias :mrgreen:
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: edp en 08 de Septiembre de 2009, 14:37:57
Muy buenas tardes, estoy tratando de hacer una conversión de un hex a un char como se comenta anteriormente, pero mi problema es que solo me convierte numeros de 8 bits si es mayor tengo problemas:

char  texto[];
int DATO;
dato=255;
sprintf(texto, "%u",dato); // Converts adc to text
texto[8] = '\0';
glcd_text57(0,16,texto,2,1);

Donde meto la pata? :-/ :-/ :-/ :-/ :-/ :-/ Muchas gracias
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Suky en 08 de Septiembre de 2009, 14:42:11
Utiliza el parámetro %lu, y es recomendable que indiques el largo del string, por ejemplo para 16bit, usa Texto[6];


Saludos!
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: edp en 08 de Septiembre de 2009, 14:54:35
que rapido en contestar, acabo de probar con %lu y me sale el siguiente error. printf format type is invalid

char texto[8];
int DATO;
dato=257;
sprintf(texto, "%lu",dato); // Converts adc to text
texto[8] = '\0';
glcd_text57(0,16,texto,2,1);
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: Suky en 08 de Septiembre de 2009, 14:58:00
No, dato debe ser de 16 bits. (int16 Dato)
Título: Re: Como convertir un numero hexadecimal a un decimal string
Publicado por: edp en 08 de Septiembre de 2009, 15:03:27
Muchisimas gracias :) :) :), llevaba 2 horas sin conseguir hacer la conversión, ahora sigo peleando con el GLCD.

Saludos