TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mauro2555 en 15 de Abril de 2011, 23:33:12

Título: problema en conversion
Publicado 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.
Título: Re: problema en conversion
Publicado por: Suky en 16 de Abril de 2011, 00:50:55
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!
Título: Re: problema en conversion
Publicado por: mauro2555 en 16 de Abril de 2011, 01:19:43
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!!..