Wie kann ich Delphi-Strings mit fester Länge verwenden, indem ich breite Zeichen verwenden?
-
24-10-2019 - |
Frage
Unter Delphi 2010 (und wahrscheinlich auch unter D2009) ist der Standard -String -Typ Unicodestring.
Allerdings, wenn wir deklarieren ...
const
s :string = 'Test';
ss :string[4] = 'Test';
... dann die erste Zeichenfolge s wenn Unicodestring, aber der zweite ss wird deklariert als Ansistring!
Wir können das überprüfen: SizeOf(s[1]);
wird die Größe 2 zurückgeben und SizeOf(ss[1])
; wird die Größe 1 zurückgeben.
Wenn ich erkläre ...
var
s :string;
ss :string[4];
... als ich das will ss ist auch ein Unicodestring -Typ.
- Wie kann ich Delphi 2010 erkennen, dass beide Saiten ein Unicodestring -Typ sein sollten?
- Wie kann ich das sonst erklären? ss Hält vier Widechars? Der Compiler akzeptiert die Typdeklarationen nicht
WideString[4]
oderUnicodeString[4]
. - Was ist der Zweck von zwei anders Compiler -Erklärungen für dasselbe Typ Name: Saite?
Lösung
Die Antwort darauf liegt in der Tatsache, dass string[n]
, die ein ShortString
, wird jetzt als Legacy -Typ angesehen. Embarcadero traf die Entscheidung, sich nicht zu konvertieren ShortString
Unterstützung für Unicode zu haben. Da die lange Saite eingeführt wurde, wenn mein Gedächtnis in Delphi 2 korrekt dient, scheint mir das eine vernünftige Entscheidung zu sein.
Wenn Sie wirklich feste Längenarrays von Widechar wünschen, können Sie einfach deklarieren array [1..n] of char
.
Andere Tipps
Sie können nicht, verwenden
string[4]
als Typ. Das Ernennen so automatisch macht es zu einem Kurzschluss.Erklären Sie es stattdessen als eine Reihe von Char, was es zu einer Reihe von 4 Widechars macht.
Weil ein
string[4]
macht es zu einer Zeichenfolge mit 4 Zeichen. Da Widechars jedoch mehr als ein Byte groß sein können, wäre dies a) falsch und b) verwirrend. Shortstrings sind immer noch für die Rückwärtskompatibilität und sind automatisch anSstrings, da sie aus [x] ein Byte -Zeichen bestehen.