A jakie masz wymagania jeśli chodzi o wydajność? To jednorazowa konwersja, czy coś, co jest liczone na bieżąco?
Bo jeśli to ma być zrobione prosto i działać szybko, to ja bym to stablicował jako nibble (4 bity):
0 -> 0
1 -> 8
2 -> 4
3 -> C
4 -> 2
...
E -> 7
F -> F
Nie zapominając o zamianie miejscami młodszego nibble ze starszym.
Unika się jakiejkolwiek konwersji z/na format binarny*, przesuwania bitów itp. Masz znaki HEX na wejściu i znaki HEX na wyjściu.
* - z wyjątkiem policzenia indeksu do tablicy.