Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 16:42
Das gibt die CodePage an, welche für den String verwendet wird.

Delphi-Quellcode:
type
  UTF8String = type AnsiString(CP_UTF8);
In den neuen LongStrings wird (zumindestens in Delphi) neben der String-Länge auch noch die CodePage und die CharSize gespeichert, damit Delphi dementsprechend die Typumwandlung automatisch machen kann, also die CodePage anpassen, wenn man den String von einer Variable in eine Andere kopiert/übergibt/castet.

Nur beim RawByteString wird keine Konvertierung des Textinhaltes vorgenommen.


Das TYPE gibt dabei an, daß ein eigener Typ in der RTTI generiert wird.
Delphi-Quellcode:
type
  X = Byte;
  Y = type BYTE;
X ist nur ein Alias für Byte, während TypInfo(X) das Byte als Typ liefert.
Y ist aber ein eigener Typ, welcher so groß wie ein Byte ist. Er ist auch kompatibel mit dem normalen Byte. Aber z.B. bei der Typprüfung für Parameter wird der Typ entsprechend ausgewertet.



Ein AnsiString/UnicodeString entspricht nur Teilweise einem array of AnsiChar/WideChar .
Dort ist noch hinten eine implizite doppelte #0 angehängt und dann eben noch die zusätzlichen erwähnten Infos (CharSize und CodePage, welche vor der Length untergebracht wurden)
Außerdem ist bei den LongStrings das CopyOnWrite aktiv, was man bei den normalen Arrays oftmals leider vergessen hat zu aktivieren.
$2B or not $2B

Geändert von himitsu ( 9. Nov 2013 um 16:47 Uhr)
  Mit Zitat antworten Zitat