TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pocher en 06 de Noviembre de 2004, 12:03:00

Título: Pasar un elemento de un array a entero
Publicado 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?
Título: RE: Pasar un elemento de un array a entero
Publicado por: wqtrp en 06 de Noviembre de 2004, 13:01:00
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....
Título: RE: Pasar un elemento de un array a entero
Publicado por: juanelete en 06 de Noviembre de 2004, 13:40:00
Hola

Si lo que quieres es convertirlo a un valor entero creo que seria:

int x;

x=atoi(buffer[2]);


Saludos Sonrisa

Título: RE: Pasar un elemento de un array a entero
Publicado por: pocher en 06 de Noviembre de 2004, 23:26:00
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.
Título: RE: Pasar un elemento de un array a entero
Publicado por: Sispic en 07 de Noviembre de 2004, 00:06:00
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 .

Título: RE: Pasar un elemento de un array a entero
Publicado por: telekitor en 07 de Noviembre de 2004, 04:23:00
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) RebotadolocoNoche
Título: RE: Pasar un elemento de un array a entero
Publicado por: pocher en 07 de Noviembre de 2004, 07:12:00
Sí eso es, ya está. Gracias
Título: RE: Pasar un elemento de un array a entero
Publicado por: lu6vg en 08 de Noviembre de 2004, 08:38:00
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...
Título: RE: Pasar un elemento de un array a entero
Publicado por: T0ni0 en 08 de Noviembre de 2004, 11:15:00
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
Título: RE: Pasar un elemento de un array a entero
Publicado por: gfp en 08 de Noviembre de 2004, 16:43:00
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 Sonrisa
Título: RE: Pasar un elemento de un array a entero
Publicado por: JacoPastorius2004 en 08 de Noviembre de 2004, 17:06:00
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!
Título: RE: Pasar un elemento de un array a entero
Publicado por: JacoPastorius2004 en 08 de Noviembre de 2004, 17:13:00
Hola!

Al final no salio bien lo que tipee, seria:

*numero = string[posicion];

Ahora si me despido
Título: RE: Pasar un elemento de un array a entero
Publicado por: kruskal en 08 de Noviembre de 2004, 22:40:00
Muchas respuestas para algo muy sencillo, no sera demasiada rigurosidad.

Salud2
Título: RE: Pasar un elemento de un array a entero
Publicado por: pocher en 09 de Noviembre de 2004, 06:48:00
- 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

Título: RE: Pasar un elemento de un array a entero
Publicado por: T0ni0 en 09 de Noviembre de 2004, 07:33:00
Pues va a ser q tienes razon y andaba confundido "lo siento"

pero puedo ratificar q para cadenas va a la perfección Payaso