TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pocher en 06 de Noviembre de 2004, 12:03:00
-
A ver si me sacais esto, ya me he cansado de darle vueltas:
Tenemos la cadena buffer[10]="0123456789"
Pués bien, quiero convertir a entero el elemento buffer[2] ¿Como leches se haría?
-
por ahi no entendi el problema, pero ...
x=buffer[2] ?? no funcionaria para lo q quieres?
claro q eso te devuelve un ascii que es un 50 decimal...
y sino es asi, pues explicate un cachito mas....
-
Hola
Si lo que quieres es convertirlo a un valor entero creo que seria:
int x;
x=atoi(buffer[2]);
Saludos ![Sonrisa Sonrisa]()
-
Se trata de pasar a entero un determinado caracter de la cadena (que son caracteres numéricos, pero caracteres)
Sí eso, con la funcion atoi, tal cual lo has puesto fué lo primero que intenté pero no funciona, compila sin errores pero dá siempre como resultado 0.
-
resultado = ( buffer[2] - 0x30 ); // tenemos el digito en decimal si se le resta "0"
resultado = resultado * 100 // buffer 2 son las centesimas
no se si es a esto a lo que te refieres .
-
Si son siempre numeros, deberia de ser asi, el numero lo obtienes de restarle 48 decimal al caracter que te da (ascii 0 = 48, 1 = 49, 2 = 50.......etc)
![Rebotado Rebotado]()
![loco loco]()
-
Sí eso es, ya está. Gracias
-
Una manera memotecnica sencilla es
letra[2]="012";
int numero;
numero = letra[1] - "0";
Dado que el valor ascii del caracter cero es 48 como bien dijeron al poner de esta manera te queda claro que haces la conversion. Sino cuando lees un codigo viejo te podes estar preguntando de donde cuernos salio el 48...
-
Pues más facil:
yo lo he hecho con long int y va bien
long int x;
x= atol(bufer[2]);
ah!!! TODO el string tambien
x= atol(bufer); // si bufer es {120} x será 120 decimal
con el float tambien va bien
float x;
x=atof(bufer); // y!!!!!!!! te hace el punto y todo bufer=={1.23} x=1,23 float
ciertamiente muy útil ![Giño Giño]()
-
Este es un trozo del programa que utilizo para recibir datos desde otro procesador, los datos recibidos (en interrupción) son en ascii, y me funcionan sin problemas.
#int_RDA
void RDA_isr()
{
char DIRECCION[3];
char AUX[6];
gets(DIRECCION);
gets(AUX);
PUNTERO = atoi(DIRECCION);
DATO = atof(AUX);
.
.
.
}
Aunque una solución práctica es restandole el hexa 30 al numero, bueno, ésto se hace como dijeron anteriormente si son sólo números. Considero utilizar una rutina que determine si el numero que llegó es número... tu me entiendes verdad?.
Gherson
-
Hola!
Pocher atoi te tiene que andar. Cuando recibis cero es por que ha habido un error en la conversion.
Atoi intenta convertir hasta que encuentra el caracter NULL que existe al final de todo string. De este modo sabe cuando tiene que parar la conversion. De algun modo tenes que enviarle como parametro un string con un solo caracter a convertir mas el NULL por supuesto.
Proba algo como esto: Tiene que andar!!! es mas elegante!!!
char string [] = "0123456789"; // tu cadena de caracteres a convertir
char numero[2] = {0}; // auxiliar para la conversion (el caracter + NULL)
int n1 = 0; // ejemplo de una suma
int n2 = 0;
int suma = 0;
*numero = string[3]; // este caracter o el que quieras convertir
n1 = atoi(numero); // aca hago la conversion
*numero = string[6]; // este o el que quieras convertir
n2 = atoi(numero);
suma = n1 + n2; // seria 3 + 6
Necesitas ese auxiliar porque atoi intenta convertir toda la cadena hasta encontrar NULL, entonces debes pasar solamente una cadena con el caracter a convertir + NULL. Me explico
Despues podes armarte una funcion que reciba la posicion del caracter a convertir y usas:
*numero = string:
Probalo y contame!
-
Hola!
Al final no salio bien lo que tipee, seria:
*numero = string[posicion];
Ahora si me despido
-
Muchas respuestas para algo muy sencillo, no sera demasiada rigurosidad.
Salud2
-
- La solución más intuitiva y rápida es: numero = buffer[2] - "0"
- Tonio con x=atoi(buffer[2]) o con x=atol(buffer[2]) tal cual, no funciona. Así directamente,son para cadenas de caracteres pero no sirven para un caracter individual.
- Para un caracter individual y empleando la función atoi(), se tiene que hacer como nos ha explicado JacoPastorius2004 (¡Comprobado y funcionando!)
Un saludo
-
Pues va a ser q tienes razon y andaba confundido "lo siento"
pero puedo ratificar q para cadenas va a la perfección