Seriale e checksum, come confronto il check ricevuto e calcolato

Ciao a tutti, torno a disturbarvi con una domanda che mi sto ponendo da almeno un'ora senza riuscire a venirne fuori, forse è la stanchezza perché mi sembra che sia un problema abbastanza banale, ma veniamo al dunque...

Io devo inviare una stringa NMEA via seriale, questa ha gli ultimi due caratteri che sono il valore HEX del byte di checksum. Il problema è che io li ricevo come stringa.

Lato arduino leggo la stringa e mi calcolo il checksum sotto forma di byte, a questo punto devo confrontare...

Il punto è che non riesco a capire come trasformare i due caratteri nel corrispettivo HEX...

La cosa è abbastanza semplice da fare, prima controlli se lo char è compreso tra 0 e 9 oppure tra A e F, nel primo caso sottrai 48 allo char, nel secondo caso sottrai 65, in questo modo ottieni un valore compreso tra 0 e 15, ovvero tra 0x0 e 0xF, ripeti l'operazione per il secondo char del cheksum. Assegna ad un unsigned char (byte) il primo valore, shiftalo di quattro bit verso sinistra e somma il secondo valore, ecco il tuo chesksum convertito da ascii in unsigned char.

Sapevo che era una cavolata, ma proprio non mi veniva!

Gentilissimo, grazie mille :)

astrobeed: La cosa è abbastanza semplice da fare, prima controlli se lo char è compreso tra 0 e 9 oppure tra A e F, nel primo caso sottrai 48 allo char, nel secondo caso sottrai 65, in questo modo ottieni un valore compreso tra 0 e 15, ovvero tra 0x0 e 0xF, ripeti l'operazione per il secondo char del cheksum. Assegna ad un unsigned char (byte) il primo valore, shiftalo di quattro bit verso sinistra e somma il secondo valore, ecco il tuo chesksum convertito da ascii in unsigned char.

Unica cosa, è possibile che sia da sottrarre 55 e non 65? altrimenti otterrei 0-9 con due caratteri che mi danno 0-5

Si hai ragione, con le lettere devi sottrarre 55 per ottenere un valore compreso tra 10 e 15.