Du kannst auch einen String/UnicodeString/WideString verwenden, aber bedenke, daß dieser 2 Byte pro Char besitzt.
PS: Statt des AnsiStrings, verwendet man für sowas den RawByteString ... das ist zwar auch ein AnsiString, aber ohne Behandlung der CodePage.
Genauso, wie es den Utf8String gibt, welches einen "AnsiString" mit voreingestellter UTF-8-CodePage (CP_UTF8) darstellt.
Wobei man eben auch TBytes (ein Array of Byte) verwenden könnte, oder halt doch PByte und Co.
Bei RawByteString und TBytes hat man den Vorteil, daß sich Delphi um die Speicherverwaltung (vorallem die Freigabe) kümmert
und das sogar threadsave, über mehrere Referenzen hinweg.
(ja, man mag es kaum glauben, aber auch die
RTL kann teilweise threadsave sein)
Und ja, auch in einem
Unicode-Programm ist es manchmal ratsam/sinnvoll, wenn man AnsiStrings verwendet ... eben genau dann, wenn man wirklich
ANSI benötigt (genau so wie man damals auch in einem
ANSI-Programm den WideString nutzen konnte) oder eben wenn man einen "String" als Byte-Puffer nutzen will, denn SizeOf(AnsiChar) = SizeOf(Byte).
So war es damals eigentlich schon fahrlässig, wenn man für solche Datenpuffer den "String" verwendete, obwohl man eigentlich den AnsiString hätte nutzen müssen, weil sich der String ja ändern konnte/tat.