|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Genova
Messaggi: 2285
|
[C++] Da stringa ad intero: perchè questa funzione non va?
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.
Codice:
//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;
}
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: Codice:
lcd.print(((byte)s.charAt(k)-48) * pow(10, sLen-k-1),0); lcd.print("#");
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... NOTA: uso i tipi byte perchè su microprocessori non ho molta memoria, quindi meglio non usare int ove possibile.
__________________
Lego ™ Fans Club |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Non ho capito bene con che stringhe stai lavorando, se sono std::string ti basta fare così:
Codice:
int num = atoi(str.c_str()); Codice:
istringstream stream(str); int num; stream >> num; |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Genova
Messaggi: 2285
|
Dunque, le stringhe non credo siano quelle classiche del C++.
Qui trovi maggiori info http://arduino.cc/en/Reference/StringObject Ho provato con atoi() ma vuole un carattere per volta. Si pow mi da un double, però senza decimali, quindi posso troncarlo a intero per incrementare retNum senza perdite. Non ho capito il char che dicevi tu
__________________
Lego ™ Fans Club |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Ho notato che retNum è di tipi int, invece il valore che incrementi è un byte, forse dovresti provare a fare un cast o a modificare il tipo.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:58.



















