Jupp, mit Delphi 2009 wurden Char, PChar und String aus
Unicode geändert.
Der
Typ String[x] und ShortString war und ist weiterhin ein ShortString (ein Record aus AnsiChars mit Längenbyte im Char[0]) ... im/bis Delphi 1 war das mal der Typ "String".
Bei Lazarus/FreePascal mußt du dagegen aufpassen, denn dort sind die verwendeten String-Typen teilweise UTF-8.
Mit AnsiChar/PAnsiChar/AnsiString sollte aber in Lararus und Delphi hier kein Problem geben.
PS: Sowas ist auch der Grund, warum man keine dynamischen Typen und Funktionen verwenden sollte, wenn es um "externe" Daten geht.
Char/PChar/String hängen vom Compiler ab. Früher hing auch mal Integer/Cardinal davon ab, aber bei 64 Bit wurden die eingefroren und jetzt heißt der compilerabhängige Typ im Delphi NativeInt und NativeUInt.
Ach ja, das Suchen in HexToNibble ist etwas ... naja.
Das kann man auch ohne Schleife machen, entweder matematisch (Zuffern und Buchstaben sind jeweils in fortlaufenden Bereichen)
oder über Maps. (siehe B2HConvert und H2BConvert in System.Classes)