Delphi-Quellcode:
j := Ord (st[1]); if j>57 then j := j-65 else j:=j-48;
k := Ord (st[2]); if k>57 then k := k-65 else k:=k-48;
Ist Quatsch, statt 65 muss das 55 sein.
Damit Kleinbuchstaben berücksichtigt werden (dann ist das zwar kein Hex, aber egal), würde ich mir eine Lookuptabelle basteln:
Delphi-Quellcode:
Var
HexTable : Array [Char] Of Byte;
Begin
For c:='A' to 'F' do HexTable [c] := Ord (c)-Ord('A') + 10;
For c:='a' to 'f' do HexTable [c] := Ord (c)-Ord('a') + 10;
For c:='0' to '9' do HexTable [c] := Ord (c)-Ord('0');
...
st2[i] := HexTable(st[1]) shl 4 or HexTable(st[2]);
Zum shiften: linksshiften um X Stellen ist gleichbedeutend mit einer multiplikation um 2^X. Hier werden aus 2 'nibbles' (4 bit) ein 8bit werden zusammengebastelt. Ich schiebe die ersten 4 bits um 4 stellen nach links (shl 4) und packe die zweiten 4 bits in die dann freien 4 bits (or).