Go Down

Topic: De CHAR a INT, obtener valores a partir de cadenas de caracteres [SOLUCION] (Read 2 times) previous topic - next topic

SrDonGato

Buenas tardes.

Os propongo una solución a una duda repetitiva que se pregunta mucho en el foro, es la de obtener valores a partir de una cadena de caracteres que hemos recibido por ejemplo por puerto serie.

Esta solución la he utilizado al hacer la diagnosis a unos equipos en mi trabajo, el equipo en cuestión devuelve por puerto serie una serie de valores en hexadecimal de 2 dígitos, y quería que arduino lo procesase y lo guardara en una memoria. estos valores siempre tienen la misma posición en la trama.

Os dejo a modo de librería estas dos funciones:

calculadesdeASCII(string,posicion)
calculadesdeASCIIHEX(string,posicion)

La primera lo que hace es devolver un INT negativo o positivo según interprete en la cadena de caracteres en la posicion que le hemos dicho. La posición que hay que darle es la de la primera cifra, sin contar el signo - (menos), por ejemplo si tenemos el 354, hay que pasarle la posición del 3 en el string. si tenemos -837 hay que pasarle la posición en la que está el 8.

La segunda devuelve un entero sin signo a partir de valores hexadecimales, esto no tienen signo asi que no toma en cuenta el signo - (menos) y hace el cálculo en base hexadecimal.

Cabe la posibilidad de que no se sepa en un primer momento donde están las primeras cifras de los números, para ello hay que hacer un recorrido del string detectando en qué posiciones están las primeras cifras y luego aplicar la función en las posiciones obtenidas.

En el la librería hay un código de ejemplo para que probéis la funcionalidad del mismo.

espero que os ayude.

Un cordial saludo.

ejemplo de utilización

Code: [Select]
char cadena[] = "Numeros 56, FF, -34, 432, 2FA";
int numeroobtenido =0;

#include "CharToInt.h"

void setup()
{
 Serial.begin(9600);

 Serial.println(cadena);

 Serial.print("Numero en la posicion 8 ");
 numeroobtenido=calculadesdeASCII(cadena,8);
 Serial.println(numeroobtenido,DEC);

}

void loop()
{
 
}






Valen

hla,
lo primero, gracias por compartir el código.

Creo que en ambas funciones has llamado "cad" a la cadena de texto que se recibe en la cabecera de función,, y luego la usas como "cadena" en el cuerpo de la función.

al menos, cambiando esto, compila correctamente en mi proyecto.....

SrDonGato

Cierto :D

Me compliaba bien y me hacia todo bien , imagino habrás bajado el pde, funcina bien , pero si es cierto lo que dices , habrá que cambiarlo. ahora mismo me pongo a ello y lo subo bien.

Gracias por el reporte ¡


SrDonGato

Error corregido, funcionaba porque en el principal estaba declarada cadena también.

subo el corregido

saludos ¡

Go Up