Buonasera,
ho la necessità di convertire un intero in una stringa.
Il numero ha un max di quattro cifre (9999) e devo aggiungere lo zero iniziale se le cifre sono una o tre, cioè:
1=>01
12=>12
123=>0123
1234=>1234
in definitiva, la stringa che devo ottenere è sempre di due o quattro caratteri.
Inizialmente, avevo risolto utilizzando sprintf
uint16_t number = 123;
char digits[5];
if (number<10) {
sprintf(digits, "%02d", number);
} else if (number > 99 && number < 1000) {
sprintf(digits, "%04d", number);
} else {
sprintf(digits, "%d", number);
}
Serial.print("=>");Serial.println(digits);
poi mi sono ricordato d'aver letto, che se possibile è meglio non usare sprintf per ridurre la memoria utilizzata, allora l'ho scritta cosi:
uint16_t number = 123;
char digits[5];
itoa(number, digits, 10);
uint8_t digits_count = strlen(digits);
Serial.print(digits);
if (digits_count == 1 || digits_count == 3) {
for (byte i = digits_count+2; i > 0; i--) {
digits[i] = digits[i-1];
}
digits[0] = '0';
digits_count = strlen(digits);
}
Serial.print("=>");Serial.println(digits);
ed in effetti, guadagno circa il 5% di spazio disponibile!!!
Domanda (solo per curiosità), c'è un modo più "conciso" per ottenere lo stesso risultato?
TIA
Federico