Go Down

Topic: Byte to String (Read 442 times) previous topic - next topic

D4ng3R92

Ciao a tutti!
Di sicuro sarà una cavolata -.-'' ma vabbè.
Io leggo dei byte dalla porta seriale del mio Arduino, e avrei la necessita di convertire questi byte in stringhe. Ma non voglio il carattere corrispondente, se mi arriva per esempio 0x0B dalla seriale voglio convertirlo in "0B".
E' possibile?

grazie.

niki77

Ma ti serve di avere proprio il char[] del valore o ti basta solo di visualizzarlo?
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

D4ng3R92

Dovrei concatenarlo ad un' altra stringa da mandare via Ethernet :) Quindi dovrei avere il char[]

niki77

Per mandarlo via ethernet puoi usare sprintf anche senza creare prima una variabile.  (molto più efficiente in termini di memoria)

Sennò usa l'oggetto String( arduino 0019 o superiore)

String stringOne =  String(45, HEX);                // using an int and a base (hexadecimal)

fonte http://arduino.cc/en/Tutorial/StringConstructors
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

D4ng3R92

Proverò! Ti ringrazio :)

D4ng3R92

Usando la classe string funziona tutto, ma vorrei risparmiare un po di memoria ed usare sprintf.

Mi restituisce questo errore:
Code: [Select]

Codice:
Serial.print(sprintf(buffer[j], "%x"));

Errore:
invalid conversion from 'byte' to 'char*'


Io devo convertire dei byte non dei caratteri... :smiley-sweat:

lesto

gista l'idea, sbagliata la realizzazione...

spintf come primo argomento vuole IL PUNTATORE alla stringa (quindi non "il carattere"), come secondo argomento il % deve essere seguito dal TIPO di dato, ed infine la/le variabili le passi come argomento successivo. Quindi sarebbe:

sprintf(buffer, "%d", x);

ma così perdi il contenuto di buffer; per risolvere, prima di tutto buffer[0] nel setup lo poni = '\0' se no si incasina tutto (e anche quando vuoi azzerare la stringa, basta questa operazione) e poi:

sprintf(buffer, "%s%d", buffer, x);

ma puoi fare di meglio: evitare completamente l'uso di sprintf:

buffer[j]=x;

se vuoi invece convertire (non è il tuo caso, ma per completezza) dovresti fare:

buffer[j]=x+'0';//in caso di numeri, con le lettere il procedimento è simile ma non ha molto significato all'atto pratico
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up