TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ferorts en 21 de Diciembre de 2010, 10:24:44
-
Hola a todos, mi problema es que tengo que convertir un numero introducido a una variable de tipo string,por rs232 a un numero entero para poder trabajar con el, he estado mirando el manual las funciones atoi,atol,atoi32 ,pero mi problema esque con esos ejemplos del manual de ccs c solo consigo convertir numeros de hasta 255 (8bits) y yo necesito trabajar con valores de 0 a 2000, o sea 11 bits.
char s2[9];
int i,ret=0;
int x;
printf("\r\n Comando :");
fgets(s2);
printf("\r\n Comando introducido es ");
puts(s2);
x = atoi32(s2);
printf("\r\n\n Comando atoi32 %d :",x);
Gracias.
-
Hola.
Es con la función atol(). Recuerda incluir la librería string.h.
Syntax:
ivalue = atoi(string)
or
lvalue = atol(string)
or
i32value = atoi32(string)
Parameters:
string is a pointer to a null terminated string of characters.
Returns:
ivalue is an 8 bit int.
lvalue is a 16 bit int.
i32value is a 32 bit int.
Function:
Converts the string passed to the function into an int representation. Accepts both decimal and hexadecimal argument. If the result cannot be represented, the behavior is undefined.
Saludos
-
Muchas Gracias , probe con long int, pero no me salio,me equivocaria en algo mas,xdd , he probado declarando la variable en int16 y perfecto.Dejo el codigo por si le sirve a alguien.
#include <stdlib.h> //Libreria a incluir para usar funcion de conversion.
int i,ret=0;
int16 x;
printf("\r\n Comando :");
fgets(s2);
printf("\r\n Comando introducido es ");
puts(s2);
x = atol(s2);
printf("\r\n\n Numero es: %Lu ",x);
-
hola a todos, pues bien he leído un poco acerca de como convertir ascii a entero, según veo se puede hacer con la función atol de la librería stdlib.h
Estoy recibiendo datos de un gps y estoy almacenando todo en un arreglo de 45 posiciones, donde los dos últimos bytes corresponden al checksum (no capturo CR y LF)
como está en ascii y separado en bytes, quisiera comprobarlo con el checksum que calculo yo al recibir toda la cadena, básicamente lo pienso así:
1-obtener el valor decimal del primer byte restando 48 y multiplicarlo por 10
2-obtener el valor entero del segundo byte restando 48
3-sumar ambos números obtenidos
no se si le doy muchas vueltas al asunto