Pages: [1]   Go Down
Author Topic: Conversione di una stringa in un array e successivamente in int  (Read 1227 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

salve stò cercando di convertire una stringa ricevuta dalla seriale del tipo:

Code:
String Valori;
valori="1 1 0 1 25 35 20 21 22 23 1 45 235";

le posizioni sono fisse quindi avevo pensato di usare:

Code:
assegna = valori.substring(2,3); //prendo il secondo "1"
statogoccia2 = int(assegna); //converto assegna in int e lo passo alla variabile che devo aggiornare

ma mi dice che non può convertire:
error: cannot convert 'String' to 'int' in assignment
Logged

Italy
Offline Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Substring(2,3) parte dal terzo carattere della stringa (0,1,2) e estrae una stringa di 3 caratteri. Quindi cerchi di mettere '1 0' in una variabile di tipo int.
Logged

"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

secondo me dovresti costruire il parser in modo che cerchi gli spazi ed inserisca in un buffer i caratteri letti per poi convertirli in numeri interi  con il comando atoi e schiaffarli nell'array.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

innanzitutto grazie, allora ho corretto il substring

Code:
assegna = valori.substring(0,1);
lcd.print(assegna);
lcd.print("-");
assegna= int(assegna);

ora nel primo assegna ho il valore giusto, ma poi non riesco a convertirlo ne con atoi ne con int
Logged

Italy
Offline Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che vuol dire che non riesci a convertirlo? Cmq segui il consiglio di brainbooster e cerca gli spazi, anche perchè non credo tu sappia se i numeri sono a una, due o tre cifre, giusto?
N
Logged

"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per "non riesco a convertirlo" intendo che mi da errore il compilatore dicendo che non posso convertire string to int

Allora la composizione della stringa è fissa, quindi sono sicuro dei valori che gli passerò.

Code:
assegna = valori.substring(0,1);                                                                                                                                               
String fresh_from_serial = assegna;
char this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
int my_integer_data = atoi(this_char);
statogoccia2=my_integer_data;
lcd.print(my_integer_data);

con questo codice riesco a prendere il primo 1, ho fatto anche prove cambiando il primo carattere mettendoci lo 0 e funziona

Code:
assegna = valori.substring(2,1);                                                                                                                                               
String fresh_from_serial = assegna;
char this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
int my_integer_data = atoi(this_char);
statogoccia2=my_integer_data;
lcd.print(my_integer_data);

passando al secondo 1 ritorna sempre 0 stessa cosa per tutti gli altri valori che vado ad estrarre, se stampo assegna mi stampa una cosa del genere
" 1 " (spazi prima e dopo) ma  valori.substring(2,1); prende solo 1 carattere giusto dalla posizione 2?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

allora trovato il problema:
valori.substring(X,Y);
x carattere di inizio
y carattere di fine, non la lunghezza

Logged

Italy
Offline Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai ragione, sorry
Logged

"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai ragione, sorry

grazie comunque dell'aiuto

posto il codice nel caso servisse a qualcuno, è un pò macchinoso ma funziona!

Code:
//statogoccia1 (bis)
                                                                        assegna = valori.substring(6,7);                                                                                                                                               
                                                                        fresh_from_serial = assegna;
                                                                        this_char[fresh_from_serial.length() + 1];
                                                                        fresh_from_serial.toCharArray(this_char, sizeof(this_char));
                                                                        my_integer_data = atoi(this_char);
                                                                        statogoccia1=my_integer_data;
                                                                        //lcd.print(my_integer_data);
                                                                        //lcd.print("-");
                                                                       
                                                                        //durata1
                                                                        assegna = valori.substring(8,9);                                                                                                                                               
                                                                        fresh_from_serial = assegna;
                                                                        this_char[fresh_from_serial.length() + 1];
                                                                        fresh_from_serial.toCharArray(this_char, sizeof(this_char));
                                                                        my_integer_data = atoi(this_char);
                                                                        int decimale = my_integer_data * 10;
                                                                        assegna = valori.substring(9,10);                                                                                                                                               
                                                                        fresh_from_serial = assegna;
                                                                        this_char[fresh_from_serial.length() + 1];
                                                                        fresh_from_serial.toCharArray(this_char, sizeof(this_char));
                                                                        my_integer_data = atoi(this_char);
                                                                        decimale+=my_integer_data;
                                                                        duratagoccia1=decimale;
                                                                        //lcd.print(decimale);
                                                                        //lcd.print("-");

nella prima parte converte una stringa da un carattere a int, nella seconda parte converte una stringa di due caratteri in un int
Logged

Pages: [1]   Go Up
Jump to: