Conversion ASCII a Decimal

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();

  • i++;*
    y lo visualizo en un LCD con lo siguiente:
    for (int i=0; i<10; i++){
    _ lcd.print(strArray*);_
    _
    }*_
    y me aparece el numero 0102FFD37E.
    Lo que quiero es que se guarde en algun sitio su conversion a decimal, o sea, 4345287550 para poderlo visualizar en un LCD.
    Como podeis comprobar, el numero es mayor que lo que puede contener un registro del tipo long.
    Gracias por vuestro interés y ayuda.

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)