Alla ricerca di come convertire una stringa in un numero sono approdato qui Syntax & Programs › convertire una Stringa in Int - #4 by lestofante - Generale - Arduino Forum da leggere fino in fondo
A parte la totale assenza dell'argomento nei reference dove comunque c'e' un capitolo " Conversion" viene da dire " Viva il Basic" che con uno striminzito val ed str di porta da uno all'altro senza una pagina di codice
Finche' si lavora su un PC , hai voglia di esaurire le risorse
Ma su Arduino ci fai un po' de sta roba e ci rimani a piedi
Questo perché String è un oggetto introdotto dall'Arduino, quindi una classe, non è perciò un tipo di dato per cui per poterlo convertire va prima riportato in un tipo di dato standard del C.
leo72:
Questo perché String è un oggetto introdotto dall'Arduino, quindi una classe, non è perciò un tipo di dato per cui per poterlo convertire va prima riportato in un tipo di dato standard del C.
per cui non c'e soluzione se non con quanto indicato da lesto nel TRD indicato all'inizio
String D3 = "46";
char thisChar[D3.length()+1];
D3.toCharArray(thisChar, D3.length()+1) ;
int a = atoi(thisChar);
lucadentella:
cosa non ti piace di questo approccio?
Guardo sempre con trepidazione la memoria disponibile
Allora non usare String ma direttamente char[]. Non è difficile da gestire, devi solo capire certi meccanismi, ma è molto più semplice e parco di risorse, alla fine.
E qui ci riallacciamo al discorso librerie in fase di compilazione, questo è il classico esempio di inclusione in automatico di molto codice, serve per gestire l'oggetto String, solo per aver definito una variabile
Difatti l'esempio è per far capire che String è una classe ingombrante che, solo per "esistere", si porta dietro una marea di robaccia.
E' come mettersi in casa un Sanbernardo oppure un Terrier: cani sono entrambi, ma il primo mangia e sporca molto di più
leo72:
Difatti l'esempio è per far capire che String è una classe ingombrante che, solo per "esistere", si porta dietro una marea di robaccia.
Allora String e' da evitare in assoluto se si ha un codice un po' corposo
ma poi il char* Riga[] andra sempre usato con la sintassi riga[] = { "testo" }
Tutta 'sta storia nasce dal fatto che x = (dataFile.read()); ti fa' trovare su x il valore ascii letto dalla SD
Quindi 198 per farlo diventare un numero faccio Riga.concat(char(x)) ;
La mia Riga che attualmente e' una String deve tornare un numero perche' e' di un numero che ho bisogno
Poi per capirsi tutta la storia e' la configurazione della Ethernet che vorrei fosse modificabile dalla SD anziche' dover inserire il tutto nel codice e doverlo compilare per ogni scheda
Mettiamo di proseguire con le String ( vedo di cambiare comunque )
Per comprimere e semplificare faccio questo
void Conv_atoi(String aa ){
char thisChar[aa.length()+1];
aa.toCharArray(thisChar, aa.length()+1) ;
int xx = atoi(thisChar);
byte bb(xx);
} // FINE void Conv_atob()
come faccio ha "portarmi fuori" quel bb ??
Ho riesumato i testi C e C++ di un corso fatto 20 anni fa' ma e' un po' una impresa
lucadentella:
ti basta definire la funzione con un valore di ritorno e non "void"
Praticamente cosi' ??
byte b ;
Riga = "222" ;
b = Conv_atob(Riga) ;
Serial.println(b);
// =================
byte Conv_atob(String aa ){
char thisChar[aa.length()+1];
aa.toCharArray(thisChar, aa.length()+1) ;
int xx = atoi(thisChar);
Serial.println(xx);
byte bb(xx) ;
return bb;
} // FINE void Conv_atob()
Ho provato a risfogliare i libri ma dopo tutti 'sti anni oltretutto passati a programmare logiche molto piu' simili al basic , non e' mica semplice
Funzionare .... funziona
Ma forse e' meglio abbandonare le String
Giusto per leggere un file dalla SD e convertire una stringa si sono bruciati 14 k