Ho provato il codice, ma non mi trova il valore esatto, sfalla di qualche numero.
Ho provato con FFB che in decimale corrisponde a 4091, mentre il programmino tira
fuori 4093.
Ho provato con 103C che in decimale corrisponde a 4156, ma il programmino tira
fuori 4158.
Sembra tirar fuori numeri più grandi di 2 unità.
Comunque, vorrei capire bene la logica se non chiedo troppo

c = buffer[i] - '0';

c è un carattere e dunque contiene il codice ascii della cifra che rappresenta.
'0' corrisponde a 48 in decimale, quindi di fatto sottrai 48 a buffer[i] ed il risultato
viene salvato in c che ora conterrà il valore numerico esatto.
Non capisco perché per ottenere il valore corrispondente alle lettere si sottrae
ulteriormente 7.
Per me il codice ascii è stato sempre un casino xD

Ps: A me la fa corrispondere a 12, B a 13, C a 14, D a 15, E a 16 ed F a 17..