Isolare ultima lettera da stringa

Ciao,
Devo prendere l' ultimo carattere da una stringa "dati" di lunghezza variabile,

Esiste un metodo diretto e/o meno pesante di:

 Serial.print(dati.substring(dati.length()-1));

Grazie

Oggetto String, usando libreria String, giusto? Non usando vettori di caratteri ?!?

Nelle String puoi anche usare le quadre per accedere ai singoli elementi, mi pare.

Serial.print( dati[dati.length()-1] );

1)- Si, 2)- Si
Grazie,
usare un solo metodo è da preferire!

Sarebbe da preferire NON usare gli oggetti String e usare gli array di char :grin:
Occhio che gli String sono pesanti e siccome, con alcune loro istruzioni, consumano memoria a run-time, potresti trovarti a consumare tutta la memoria (non sempre ma può accadere) dopo un pò di tempo che il programma gira ed esegue più volte queste istruzioni.

nid69ita:
Occhio che gli String sono pesanti e siccome, con alcune loro istruzioni, ... a consumare tutta la memoria (non sempre ma può accadere)

E' anche il caso di length()?

No. Quella interroga solo.
Sono la concatenazione fra String e la substring() soprattutto.

nid69ita:
Sono la concatenazione fra String soprattutto.

Brutta notizia =(
Purtroppo è il mio caso!
ma ... se uso Reset_AVR(); richiamato da millis()
potrebbe servire?

Ammetto l'ignoranza, non sò cosè Reset_AVR()

nid69ita:
Ammetto l'ignoranza, non sò cosè Reset_AVR()

... nid ... QUI

Una semplice macro che usa il watchdog :wink:

Guglielmo

gpb01:
... nid ... QUI
Una semplice macro che usa il watchdog :wink:
Guglielmo

Thanks :smiley:

L' uso forse improprio di Reset_AVR() dovrebbe ovviare a:

nid69ita:
dopo un pò di tempo che il programma gira ed esegue più volte queste istruzioni.

Sarebbe sicuramente meglio risolvere il problema a monte!
Purtroppo io non saprei come scrivere un equivalente usando gli array di char, per sommare stringhe tipo:
String totale =strinaga1+strinaga2+stringa3;

Gli oggetti String non sono il male assoluto.
Dipende solo da quanto grandi sono le stringhe che concateni. Un trucco per evitare overflow della RAM è quello di fare 1 concatenazione per volta, ad esempio. Le operazioni di concatenazione sono una cosa che impallano il chip.
Inoltre prima di iniziare a lavorare su una stringa fai un'assegnazione vuota, per "resettarle": stringa = ""; - senza spazi tra le virgolette

leo72:
quello di fare 1 concatenazione per volta,

Grazie!
Se ho capito, scrivendo nel seguente modo :

totale ="";
totale +=stringa1;
totale +=stringa2;
totale +=stringa3;

Risulterà + digeribile al nostro AVR?

Sì esatto.
E se hai testi costanti tipo Serial.println("CIAO") usa la funzione F() per spostare la stringa in FLASH:

Serial.println(F("CIAO"));

In questo modo liberi ulteriore RAM.