Verwende einen Lookup. Schneller geht es nicht.
Delphi-Quellcode:
Var
hexDigits : Array [AnsiChar] of Byte;
Procedure SetupLookup();
Begin
hexDigits['0'] := 0;
hexDigits['1'] := 1;
..
hexDigits['9'] := 9;
hexDigits['A'] := 10;
..
hexDigits['F'] := 15;
...
End;
// Statt dem Case-Konstrukt dann
n := hexDigits[s[i]];
Dann noch (vermutlich) statt dem indizierten String ein PAnsiChar und es wäre vermutlich noch schneller.