Es kommt drauf an, wie der Compiler der Zugriff optimiert, denn durch verschieben des Offsets (genauer der Startadresse des Arrays, für die Berechnung der Indexposition) kann man diese Substraction entfernen.
Aber man kann ja das Array auch nur hinten kürzen.
Wobei diese kleine Offset-Berechnung am Ende eh nicht auffallen würde, falls Delphi das nicht wegoptimiert, da der restliche Code dennoch wesentlich größer ist.
für 0-9 und A-F:
Delphi-Quellcode:
i := Ord(s[i]) - 48;
if i > 10
then Dec(i, 17);
ShowMessage(IntToStr(i));
PS: Oftmals arbeitet übrigens das CASE genau auf die gleiche Weise.