Autor Tema: Pasar un elemento de un array a entero  (Leído 3754 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Pasar un elemento de un array a entero
« 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?

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Pasar un elemento de un array a entero
« Respuesta #1 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....

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
RE: Pasar un elemento de un array a entero
« Respuesta #2 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


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Pasar un elemento de un array a entero
« Respuesta #3 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.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Pasar un elemento de un array a entero
« Respuesta #4 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 .


Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: Pasar un elemento de un array a entero
« Respuesta #5 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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Pasar un elemento de un array a entero
« Respuesta #6 en: 07 de Noviembre de 2004, 07:12:00 »
Sí eso es, ya está. Gracias

Desconectado lu6vg

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 313
RE: Pasar un elemento de un array a entero
« Respuesta #7 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...

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Pasar un elemento de un array a entero
« Respuesta #8 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
- T0ni0 -
30RCF112

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Pasar un elemento de un array a entero
« Respuesta #9 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

Desconectado JacoPastorius2004

  • PIC10
  • *
  • Mensajes: 42
RE: Pasar un elemento de un array a entero
« Respuesta #10 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!

Desconectado JacoPastorius2004

  • PIC10
  • *
  • Mensajes: 42
RE: Pasar un elemento de un array a entero
« Respuesta #11 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

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Pasar un elemento de un array a entero
« Respuesta #12 en: 08 de Noviembre de 2004, 22:40:00 »
Muchas respuestas para algo muy sencillo, no sera demasiada rigurosidad.

Salud2

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Pasar un elemento de un array a entero
« Respuesta #13 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


Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Pasar un elemento de un array a entero
« Respuesta #14 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
- T0ni0 -
30RCF112


 

anything