Jo, nun musst du sie nur noch richtig benutzen
Seit
Unicode (also Delphi 2009) sind die Strings
Unicode. Damit ist es vorbei mit 1 Buchstabe = 1 Byte. Die Buchstaben heißen jetzt allgemeiner "Code Point" (vereinfacht) und belegen je nach Kodierung 1-4 Bytes oder so.
Der String in Delphi benutzt vermutlich UCS-16, also 1 Codepoint = 2 Bytes in den meisten Fällen. Daher deine 2 mit der du multiplizierst: Die Stringlänge wird in
Codepoints angegeben, der Stream erwartet aber eine Länge in
Bytes!
Vernünftiger wäre es daher, die Stringlänge mit
sizeof(char)
zu multiplizieren. Und zwar beim lesen und schreiben.
P.S.: Wenn du mal ein paar japanische Zeichen (z.B.: 日本国 ) in deinen String tust, dann werden im Hexeditor auch die "Leerzeichen" befüllt