Go Down

Topic: Conversione di una stringa in un array e successivamente in int (Read 1 time) previous topic - next topic

84billy

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

Code: [Select]
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: [Select]
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

superp

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.
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

BrainBooster

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.

84billy

innanzitutto grazie, allora ho corretto il substring

Code: [Select]
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

superp

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
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"

84billy

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: [Select]
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: [Select]
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?

84billy

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


superp

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

84billy


Hai ragione, sorry


grazie comunque dell'aiuto

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

Code: [Select]
//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

Go Up