Go Down

Topic: equivalenza HEX-DEC (Read 345 times) previous topic - next topic

Giggir

Utilizando la serial1 del mio arduino due ricevo in ingresso alcuni valori dopo averli letti ho la necesittà di portarli in decimale e poi visualizzarli su un display tft.
esempio
ricevo il dato 410C1F
devo covertire solo gli ultimi due caratteri cioè 1F da HEX a DEC che sarrebbe 31 qualcuno hai mai fatto qualcosa del genere.

Giggir

girando su internet ho trovato questo codice
Code: [Select]

for (i=10;i<14;i++){                             
        if ((bufin[i]>='A') && (bufin[i]<='F')){        //if char is between 'A' and 'F'
          bufin[i]-=55;                                 //'A' is int 65 minus 55 gives 10 which is int value for hex A
        }
         
        if ((bufin[i]>='0') && (bufin[i]<='9')){        //if char is between '0' and '9'
          bufin[i]-=48;                                 //'0' is int 48 minus 48 gives 0 same as hex
        }

vbextreme

Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

Giggir

sono andato a vedere come funziona quella lib ma non credo la posso usare perchè credo che prenda come punto di riferimento il valore non il carattere quindi l'arduino quando mi legge il valore sulla seriale lo calcola come valore in ascii ecco perchè chiedevo se quella di sopra fosse corretta

nid69ita

#4
Apr 04, 2016, 09:10 am Last Edit: Apr 04, 2016, 09:13 am by nid69ita
@giggir, spiegati, mica è chiaro.  Intanto un char E' un valore   'A'=>65  la macchina ragiona a numeri mica a lettere. Poi per noi "umani" 65 ascii equivale a lettera 'A'    :o

Quella funzione è specifica per le conversioni testo->numero anche in base esadecimale.
val=strtol(bufin,NULL,16);

L'unica cosa importante è che il testo numerico dentro a bufin DEVE terminare con il carattere speciale di fine stringa '\0'  (classico del C)
my name is IGOR, not AIGOR

Go Up