Autor Tema: problema en conversion  (Leído 1780 veces)

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

Desconectado mauro2555

  • PIC10
  • *
  • Mensajes: 18
problema en conversion
« 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.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema en conversion
« Respuesta #1 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!
No contesto mensajes privados, las consultas en el foro

Desconectado mauro2555

  • PIC10
  • *
  • Mensajes: 18
Re: problema en conversion
« Respuesta #2 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!!..