TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mauro2555 en 15 de Abril de 2011, 23:33:12
-
Hola a todos, quisiera saber si alguien sabe como puedo convertir un char[] a int16, estoy tratando de usar la funcion atol() pero no consigo nada. el codigo q utilizo es el siguiente:
char datos[4];
datos[0]=read_ext_eeprom(8);
datos[1]=read_ext_eeprom(9);
datos[2]=read_ext_eeprom(10);
datos[3]=read_ext_eeprom(11);
datos[4]=read_ext_eeprom(12);
int16 mylong1=0;
mylong1=atol(datos);
write_int16_ext_eeprom(0,mylong1);
lo q trato de hacer es tomar un valor de la eeprom q esta guardado como caracteres, el valor es "35000" y en la eeprom se visualiza "33 35 30 30". Leo el valor con read_ext_eeprom() y lo almaceno en la cadena de caracteres datos[4], a continuacion tengo q guardar ese "35000" en la variable mylong1 y escribir mylong1 en la eeprom pero como int16 con la funcion write_int16_ext_eeprom() . Alguien sabe como puedo hacerlo? por q he intentado muchas formas y nada q lo consigo.
saludos.
-
Revisa sobre arreglo de variables y cadena de caracteres. Tu defines datos[4], o sea agrupas 4 char, pero cargas 5! Además si usas cadena de caracteres ascii necesitas uno adicional para indicar fin de la cadena '\0' ;-)
Saludos!
-
WOW!!! muy cierto, era solo agregar un byte con el valor de cero hexadecimal y ya. suky de nuevo gracias por el dato, hoy aprendi algo nuevo :) mira como qdo el codigo q me funciono:
char datos[12];
datos[0]=read_ext_eeprom(8);
datos[1]=read_ext_eeprom(9);
datos[2]=read_ext_eeprom(10);
datos[3]=read_ext_eeprom(11);
datos[4]=read_ext_eeprom(12);
datos[5]=0x00;//byte cero para especificar fin de cadena
int16 mylong1=0;
mylong1=atol(datos);
write_int16_ext_eeprom(0,mylong1);
gracias!!..