Oristano
Offline
Full Member
Karma: 0
Posts: 233
Arduino rocks
|
 |
« on: January 21, 2013, 02:31:48 am » |
salve...
avrei bisogno di convertire un intero (0- 65535) ... nella stringa corrisponente...
tralasciamo gli zero iniziatli che potrei aggiungere dopo.... insomma se ho 123 come int. devo convertirlo in una stringa "123".... come potrei fare?
cè una funzione diretta che faccia questo ? grazie
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #1 on: January 21, 2013, 02:51:22 am » |
sprintf oppure itoa (Google is your friend  )
|
|
|
|
|
Logged
|
|
|
|
|
Oristano
Offline
Full Member
Karma: 0
Posts: 233
Arduino rocks
|
 |
« Reply #2 on: January 21, 2013, 03:09:12 am » |
grazie tux...
adesso non sono davanti all'ide ed al micro... ma se scrivessi così:
String stringa; int intero = 123;
stringa = sprintf(intero);
dovrebbe funzionare?????
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7382
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #4 on: January 21, 2013, 03:20:24 am » |
stringa = sprintf(intero); dovrebbe funzionare?????
No, sprintf usa la stessa sintassi di printf con la differenza che scrive su un array di caratteri invece che sulla console standard, tipicamente l'UART su i micro. Usa itoa() che oltre a richiedere molta meno flash di sprintf è anche molto più veloce, parliamo di 25-40 us contro anche oltre 1 ms per la sprintf.
|
|
|
|
|
Logged
|
|
|
|
|
Oristano
Offline
Full Member
Karma: 0
Posts: 233
Arduino rocks
|
 |
« Reply #5 on: January 22, 2013, 08:36:26 am » |
Grazie... ho fatto così e funzione:
definito int intPIN = 123; // il pin in formato numerico int char bufferPIN[6]; String keyPIN;
e nella funzione keyPIN = itoa(intPIN, bufferPIN, 10));
e funziona bene.... senza dover modificare nulla del codice già esistente e funzionante... ho capito che ha bisogno del buffer, anche se solo in modo temporaneo.... ma và bene così...
adesso ho questo problema, vorrei aggiungere degli zero quando la lunghezza della stringa è inferiore a 5 elementi... cioè il PIN potrà essere 65535 e convertito in stringa sara "65535".. ovvero se il PIN (impostato nella EEpROM) fosse, per esempio, 123... la conversione dovrà rendere "00123" .. quindi sempre composto da almeno 5 char...
pensavo di leggere la lunghezza della stringa e poi non mi è ben chiario come "concatenare", uno, due o tre zeri davanti....
come mi suggerite di fare per aggiungere qualche zero all'inizio della stringa???
grazie
|
|
|
|
« Last Edit: January 22, 2013, 08:37:59 am by Paolo S »
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #6 on: January 22, 2013, 08:52:12 am » |
Ma scrivere String A=(String)numeroInt; non va?
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #7 on: January 22, 2013, 09:04:55 am » |
Posto che il tempo di esecuzione non sia un problema, potresti usare: sprintf(buf, "%05d", numero);
|
|
|
|
|
Logged
|
|
|
|
|
Oristano
Offline
Full Member
Karma: 0
Posts: 233
Arduino rocks
|
 |
« Reply #8 on: January 22, 2013, 10:15:24 am » |
Ma scrivere String A=(String)numeroInt; non va?
Non saprei Pablos... non l'ho provato.. stasera provo, anche se, a questo punto, non è più importante visto che la ìconversoine la faccio!!! ... non ho problemi di tempo.. in quanto è una funzoine che viene richiamata una volta ogni qualche settimana ..... Posto che il tempo di esecuzione non sia un problema, potresti usare: sprintf(buf, "%05d", numero); ... anche per questo.. stasera provo... ma anche se non funzoinasse nessun problema ... ma cosè quel %05d???? grazie comunque.... ma non mi avete suggerito come anteporre alcuni zeri alla stringa originata ... gli zeri dovrebbero essere in numero pari a 6 - keyPIN.length()
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #9 on: January 22, 2013, 10:48:25 am » |
ma cosè quel %05d???? Ma solo a me viene in mente di cercare su google ?
|
|
|
|
|
Logged
|
|
|
|
|
Oristano
Offline
Full Member
Karma: 0
Posts: 233
Arduino rocks
|
 |
« Reply #10 on: January 22, 2013, 10:56:08 am » |
ma cosè quel %05d???? Ma solo a me viene in mente di cercare su google ?  ... cavolo mi sa che fà già la formattazoine come la voglio io!!!! .. interessantissimo... posso formattare anche diversi dati in un unico output.... prima non gli ho dato molto peso a questa ipotesi di soluzoine perchè non l'avevo capita.. mi sembrava più semplice itoa ..... grazie .. e scusa!!!!
|
|
|
|
« Last Edit: January 22, 2013, 11:03:40 am by Paolo S »
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #11 on: January 23, 2013, 02:14:07 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Oristano
Offline
Full Member
Karma: 0
Posts: 233
Arduino rocks
|
 |
« Reply #12 on: January 23, 2013, 02:44:25 am » |
tux.....
non sono riuscito a farlo funzionare.. mi sà che esige un vettore di char ....
invece fuzniona bene String(intero); non sono riuescito invece a fare questo String keyPIN; keyPIN = "0" + String(intero); e non capisco perchè non dovrebbe concatenare le due stringhe??
neanche questo funzione keyPIN.concat ("0", keyPIN); .. divrebbe unire al primo 0 la stringa keyPIN e rimettere tutto in keyPIN ... ma non funge... suggerimenti????
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #13 on: January 23, 2013, 03:38:45 am » |
Posta il codice che "non funziona". Comunque se intuisco correttamente stai provando a passare alla sprintf() un oggetto String come argomento.. Errore: come hai ipotizzato, devi usare un vettore di char. Tipo: char buf[20]; sprintf(buf, "%05d", numero); Serial.println(buf); // opzionale - solo per debug
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #14 on: January 23, 2013, 03:54:16 am » |
intA = 123; intB = 456;
Es: Serial.println((String)intA+(String)intB); uscita "123456"
Es: Serial.println("mia stringa " + (String)intA); uscita "mia stringa 123"
Es: Serial.println((String)intB); uscita "456"
opp se vuoi caricare l'intero in una stringa e usarla come variabile Es: String interoA = (String)intA; String interoB = (String)intB;
Serial.println(interoA + interoB); Serial.println(interoA + " " + interoB);
dov'è il problema? forse non ho capito io...
|
|
|
|
« Last Edit: January 23, 2013, 04:06:35 am by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
|