System.SysUtils.CharLength
Delphi
function CharLength(const S: UnicodeString; Index: Integer): Integer;
C++
extern DELPHI_PACKAGE int __fastcall CharLength(const System::UnicodeString S, int Index)/* overload */;
Eigenschaften
| Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
|---|---|---|---|---|
| function | public | System.SysUtils.pas System.SysUtils.hpp |
System.SysUtils | System.SysUtils |
Beschreibung
Gibt die Anzahl der von einem Zeichen verwendeten Bytes zurück.
Mit CharLength stellen Sie die Größe in Byte eines Zeichens, das bei bei Index beginnt, in S fest. Wenn das Zeichen nicht bei Index beginnt, gibt diese Funktion die Größe des Restes des Zeichens zurück, nicht die vollständige Zeichenlänge.
Hinweis:Indexist ein Elementindex inSund kein Byte- oder Zeichenindex.
Wenn S ein AnsiString ist und im System kein Multibyte-Zeichensatz (MBCS) verwendet wird, gibt CharLength immer den Wert 1 zurück.
Das folgende Beispiel verdeutlicht die Arbeitsweise von CharLength.
type SJISString = type AnsiString(932); var A: SJISString; L: Integer; begin A := 'A' + 'B' + #$82#$A0 + // Japanisch Hiragana 'A' #$82#$A2 + // Japanisch Hiragana 'I' #$82#$A4 + // Japanisch Hiragana 'U' 'C' + 'D'; L := CharLength(A, 1); //gibt 1 ('A') zurück L := CharLength(A, 2); //gibt 1 ('B') zurück L := CharLength(A, 3); //gibt 2 zurück L := CharLength(A, 4); //gibt 1 zurück end.
Wenn in diesem Beispiel der Index 1 oder 2 ist, zeigt er auf den Anfang eines Einzelbyte-Zeichens, daher gibt die Funktion 1 zurück. Wenn der Index 3 ist, zeigt er auf den Anfang eines Zweibyte-Zeichens, und die Funktion gibt 2 zurück. Wenn der Index 4 ist, zeigt er auf die zweite Hälfte eines Zweibyte-Zeichens, und die Funktion gibt 1 zurück. Beachten Sie bitte, dass in diesem Beispiel die Elementgröße 1 ist. Einige Zeichen benötigen zwei Elemente und einige nur ein Element.
CharLength kann zum Suchen der Position von Multibyte-Zeichen in einem String verwendet werden.
Die folgende Funktion funktioniert auch mit Unicode-Zeichen:
var U: UnicodeString; L: Integer; begin U := 'abc'; L := SysUtils.CharLength(U,1); //gibt 2 zurück L := SysUtils.CharLength(U,2); //gibt 2 zurück U := #$20BB7; //Surrogatpaar L := SysUtils.CharLength(U,1); //gibt 4 zurück L := SysUtils.CharLength(U,2); //gibt 2 zurück end.
Beachten Sie bitte, dass die Elementgröße in diesem Beispiel 2 ist, und das Surrogatpaarzeichen aus zwei Elementen besteht.
Wenn der String abc ist, ist jedes Zeichen ein einzelnes Zweibyte-Element, daher gibt die Funktion 2 zurück. String-Literale sind per Vorgabe Unicode.
Bei dem Surrogatpaar zeigt der Index 1 auf das erste Element in dem Zeichen, daher gibt die Funktion 4 zurück. Wenn der Index 2 ist, zeigt er auf das zweite Element in dem Zeichen und gibt 2 zurück.