Referenz - WSTRING (Datentyp)
Typ: Datentyp
Ein STRING ist eine Zeichenkette, die einen zusammenhängenden Text, einzelne Wörter, Buchstaben oder sonstige Zeichen enthalten kann; auch Leerstrings (also Strings ohne jeglichen Inhalt) sind möglich.
Ein WSTRING im Speziellen ist ein Array (siehe DIM) fester Größe aus wide-chars (je nach Betriebssystem 16bit- bzw. 32bit-Zeichen), das mit einem Nullzeichen (WCHR(0)) endet; er ist also wie der ZSTRING ein null-terminierter String. Deshalb darf WCHR(0) niemals innerhalb eines WSTRINGs verwendet werden; andernfalls wird die Zeichenkette unterbrochen.
Im Allgemeinen verhält sich der WSTRING wie ein ZSTRING. Der einzige Unterschied besteht darin, dass pro Zeichen zwei (unter Windows) bzw. vier (unter Linux) Bytes reserviert werden.
Dieser Typ wurde bereitgestellt, um nicht-latein-basierende Alphabete zu unterstützen. Alle STRING-Operatoren und STRING-Funktionen (wie LEFT) funktionieren bereits mit WSTRINGs. In einigen Fällen wurden spezielle WSTRING-Routinen wie WCHR geschrieben.
Achtung: Unicode-Zeichen im Quelltext können vom Compiler nur korrekt umgesetzt werden, wenn das Byte Order Mark (BOM) gesetzt ist.
Der FreeBASIC-Compiler selbst unterstützt neben ASCII-Dateien mit UNICODE-Escape-Sequenzen (\u; siehe dazu erklärend auch OPTION ESCAPE) auch in UTF-8, UTF-16LE, UTF-16BE, UTF-32LE und in UTF-32BE codierte Quellcodes.
Beispiel:
' Bereite einen normalen STRING, einen
' WSTRING fester Länge (statisches Array)
' und einen WSTRING PTR (dynamisches Array) vor
DIM AS STRING nst
DIM AS WSTRING * 11 wst ' später sollen 10 Zeichen gespeichert
' werden. Zusätzlich muss Platz für ein
' Null-Zeichen bereitgehalten werden.
DIM AS WSTRING PTR wstp
' befülle jeden Stringtyp mit der Zeichenkette "hello"
nst = "hello"
wst = "hello"
wstp = CALLOCATE(6*SIZEOF(WSTRING)) ' Da dieser ein Pointer ist, muss zuerst der
' Speicherbereich für fünf Zeichen + ein
*wstp = "hello" ' Nullzeichen reserviert werden. Der für
' jedes Zeichen benötigte Speicherplatz hängt
' vom Betriebssystem ab.
' die drei Stringtypen ausgeben
PRINT "Inhalte:"
PRINT "nst :", nst
PRINT "wst :", wst
PRINT "wstp :", wstp
PRINT "*wstp:", *wstp
PRINT
' die Länge der Stringtypen ausgeben
PRINT "LEN(x)"
PRINT "nst :", LEN(nst )
PRINT "wst :", LEN(wst )
PRINT "wstp :", LEN(wstp )
PRINT "*wstp:", LEN(*wstp)
PRINT
' die Größe der Speicherstruktur ausgeben
PRINT "SIZEOF(x)"
PRINT "nst :", SIZEOF(nst )
PRINT "wst :", SIZEOF(wst )
PRINT "wstp :", SIZEOF(wstp )
PRINT "*wstp:", SIZEOF(*wstp)
PRINT
' die Zeichenkette " Welt" an die Stringtypen anhängen
nst &= " Welt" ' FreeBASIC verwaltet den Speicher für normale Strings
' automatisch.
wst &= " Welt" ' Da dieser WTRING fixed length ist, muss kein zusätz-
' licher Speicher reserviert werden. Da nur Platz für
' zehn Bytes reserviert wurde, ist 'wst' jetzt voll,
' eine längere Zeichenkette kann man nicht speichern.
wstp = REALLOCATE(wstp, 12*SIZEOF(WSTRING)) ' Zusätzlichen Speicher re-
' servieren, um die Zeichen-
' kette anhängen zu können,
' und dabei das Nullzeichen
' beachten.
*wstp &= " Welt" ' Jetzt kann auch hier ganz normal verfahren werden.
' ein einzelnes Zeichen austauschen:
nst [1] = 97 ' Benutze String-Indizierung: tausche
' das zweite Zeichen durch
wst [1] = 97 ' CHR(97) aus - ein kleines a.
wstp[1] = 97 ' Funktioniert problemlos bei allen
' Typen.
' die drei Stringtypen ausgeben
PRINT "Inhalte:"
PRINT "nst :", nst
PRINT "wst :", wst
PRINT "wstp :", wstp
PRINT "*wstp:", *wstp
PRINT
' nicht vergessen: den Speicher wieder freigeben:
DEALLOCATE wstp
SLEEP
Ausgabe:
Inhalte:
nst : hello
wst : hello
wstp : 3291344
*wstp: hello
LEN(x)
nst : 5
wst : 5
wstp : 4
*wstp: 5
SIZEOF(x)
nst : 12
wst : 22
wstp : 4
*wstp: 0
Inhalte:
nst : hallo Welt
wst : hallo Welt
wstp : 3291440
*wstp: hallo Welt
Unterschiede zu QB: neu in FreeBASIC
Plattformbedingte Unterschiede:
Die Unterstützung von WSTRINGs hängt von der C runtime library ab, die unter den verschiedenen Plattformen variieren kann.
- Unicode wird in der DOS-Portierung von FreeBASIC nicht unterstützt. WSTRINGs verhalten sich wie ASCII-ZSTRINGs
- Unter Windows werden WSTRINGs in UCS-2 (UTF-16 LE) codiert. Ein Zeichen belegt 2 Bytes.
- Unter Linux werden WSTRINGs in UCS-4 codiert. Ein Zeichen belegt 4 Bytes.
Unterschiede zu früheren Versionen von FreeBASIC:
- WSTRING existiert seit FreeBASIC v0.15
- Seit FreeBASIC v1.07.0 kann von einem WSTRING mithilfe von EXTENDS geerbt werden.
Siehe auch:
WSTRING (Funktion), WCHR, WSTR, WBIN, WHEX, WOCT, WSPACE, WINPUT, STRING (Datentyp), ZSTRING, Datentypen, Datentypen und Deklarationen, String-Funktionen
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|