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.

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

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



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