TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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 ?
-
Utilizando la función sprintf, y los parámetros %u o %lu
char String[];
int Num;
sprintf(String,"%u",Num);
Saludos!
-
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?
-
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,
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
-
Debes poner:
if ((!strcmp(Buffer_EEprom1
,Buffer1
))&& (!strcmp(Buffer_EEprom2
,Buffer2
)) &&(!strcmp(Buffer_EEprom3
,Buffer3
)))
Saludos!
-
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,
if ((!strcmp(Buffer_EEprom1,Buffer1))&& Pero cuado hago la comorarcion de un solo dato todo funciona OK,
cual podria ser mi error?
-
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!
-
:-/ :-/ :-/ Funciona... gracias :mrgreen:
-
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
-
Utiliza el parámetro %lu, y es recomendable que indiques el largo del string, por ejemplo para 16bit, usa Texto[6];
Saludos!
-
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);
-
No, dato debe ser de 16 bits. (int16 Dato)
-
Muchisimas gracias :) :) :), llevaba 2 horas sin conseguir hacer la conversión, ahora sigo peleando con el GLCD.
Saludos