Hola.
Tengo en un array un numero ASCII de 10 digitos leido por un lector de proximidad y lo quiero convertir en un decimal de 10 digitos, pero la conversión es tan grande que no hay registro que lo soporte.
¿Alguna sugerencia?.
Gracias.
Hola.
Tengo en un array un numero ASCII de 10 digitos leido por un lector de proximidad y lo quiero convertir en un decimal de 10 digitos, pero la conversión es tan grande que no hay registro que lo soporte.
¿Alguna sugerencia?.
Gracias.
Haz un bucle de 0 a 10, y multiplica el valor que tienes en el array por 10 elevado a la variable de bucle. Algo asi:
char ascii[10];
int f;
long resultado = 0;
/* Asumimos que tienes el bit mas significativo a la izquierda (el que primero entro) */
for (f=0;f<10;f++)
long = long + (ascii[9-f]*(10^f));
Segun mis calculos, en long tendras el valor...
Al Arduino no creo que le haga mucha gracia el usar los exponenciales, a parte de que no se ha deshecho la codificación ASCII.
Yo usaría por una mayor rapidez de cálculo:
#define CHAR_LEN 10
char ascii[CHAR_LEN];
long resultado = 0;
for (int i=CHAR_LEN;i>0;i--){
resultado = resultado * 10 + ascii[i] - '0';
}
Si no te cabe el número en el tipo long, nos dices
Un saludo
Hola a todos y gracias por contestar.
Tengo la siguiente instruccion para guardar el numero leido del taj:
while (Serial.available()){
strArray = Serial.read();
Pues como no se pueda hacer algo con sprintf, no se me ocurre nada
De todas maneras el 'unsigned long' llega hasta (2^32)-1 que es un poco más pequeño que el que has puesto, por si te sirve.
Quizá te interese usar numeros en punto flotante de doble precisión (double)