Dani88
16-12-2010, 11:47
Sto lavorando su un microprocessore programmabile in C/C++. Ho necessità di convertire una stringa mandata dal pc in un numero, dato che atoi() gestisce solo caratteri singoli ho scritto una funzione per la conversione.
//Convert a string into a number
int stringToInt(String s){
byte sLen = s.length();
int retNum = 0;
lcd.setCursor(8,2);
//lcd.print (s); lcd.print ("-");
for(byte k=0; k < sLen; k++){
retNum += ((byte)s.charAt(k)-48) * pow(10, sLen-k-1);
lcd.print(((byte)s.charAt(k)-48) * pow(10, sLen-k-1),0); lcd.print("#");
}
return retNum;
}
Il tutto sembra funzionare fino a 99: passato 99 il numero è sbagliato di uno in negativo (101 -> 100 ecc...).
Ora stampando ogni singola conversione da carattere letto in numero e poi moltiplicandolo per 10 alla ... (per ottenere centinaia, decine, unità) i numeri sono giusti, lo vedo tramite la riga:
lcd.print(((byte)s.charAt(k)-48) * pow(10, sLen-k-1),0); lcd.print("#");
Se invio ad esempio 123 mi da:
100#20#3
dunque il problema sembra dovuto a quando incremento "retNum"...
A cosa può essere dovuto?? Non riesco a capire...pensavo a qualche casino che fa per le conversioni da un tipo all'altro...
:help: :help: :help:
NOTA: uso i tipi byte perchè su microprocessori non ho molta memoria, quindi meglio non usare int ove possibile.
//Convert a string into a number
int stringToInt(String s){
byte sLen = s.length();
int retNum = 0;
lcd.setCursor(8,2);
//lcd.print (s); lcd.print ("-");
for(byte k=0; k < sLen; k++){
retNum += ((byte)s.charAt(k)-48) * pow(10, sLen-k-1);
lcd.print(((byte)s.charAt(k)-48) * pow(10, sLen-k-1),0); lcd.print("#");
}
return retNum;
}
Il tutto sembra funzionare fino a 99: passato 99 il numero è sbagliato di uno in negativo (101 -> 100 ecc...).
Ora stampando ogni singola conversione da carattere letto in numero e poi moltiplicandolo per 10 alla ... (per ottenere centinaia, decine, unità) i numeri sono giusti, lo vedo tramite la riga:
lcd.print(((byte)s.charAt(k)-48) * pow(10, sLen-k-1),0); lcd.print("#");
Se invio ad esempio 123 mi da:
100#20#3
dunque il problema sembra dovuto a quando incremento "retNum"...
A cosa può essere dovuto?? Non riesco a capire...pensavo a qualche casino che fa per le conversioni da un tipo all'altro...
:help: :help: :help:
NOTA: uso i tipi byte perchè su microprocessori non ho molta memoria, quindi meglio non usare int ove possibile.