Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

AW: Registry ReadBinaryData Problem

  Alt 1. Nov 2011, 10:27
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.
$2B or not $2B

Geändert von himitsu ( 1. Nov 2011 um 10:38 Uhr)
  Mit Zitat antworten Zitat