Null-terminierte Multibyte-Strings
Ein null-terminierter Multibyte-String (NTMBS) oder "Multibyte-String" ist eine Sequenz von Nicht-Null-Bytes, gefolgt von einem Byte mit dem Wert Null (dem terminierenden Null-Zeichen).
Jedes im String gespeicherte Zeichen kann mehr als ein Byte belegen. Die zur Darstellung von Zeichen in einem Multibyte-Zeichenstring verwendete Kodierung ist sprachabhängig: Sie kann UTF-8, GB18030, EUC-JP, Shift-JIS usw. sein. Beispielsweise ist das char-Array {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} ein NTMBS, das den String "你好" in UTF-8 Multibyte-Kodierung enthält: Die ersten drei Bytes kodieren das Zeichen 你, die nächsten drei Bytes kodieren das Zeichen 好. Derselbe String, kodiert in GB18030, ist das char-Array {'\xc4', '\xe3', '\xba', '\xc3', '\0'}, wobei jedes der beiden Zeichen als Zweibyte-Sequenz kodiert ist.
In einigen Multibyte-Kodierungen kann eine gegebene Multibyte-Zeichensequenz unterschiedliche Zeichen darstellen, abhängig von den vorherigen Byte-Sequenzen, bekannt als "Shift-Sequenzen". Solche Kodierungen werden als zustandsabhängig bezeichnet: Das Wissen über den aktuellen Shift-Zustand ist erforderlich, um jedes Zeichen zu interpretieren. Ein NTMBS ist nur gültig, wenn er im initialen Shift-Zustand beginnt und endet: Wenn eine Shift-Sequenz verwendet wurde, muss die entsprechende Unshift-Sequenz vor dem terminierenden Null-Zeichen vorhanden sein. Beispiele für solche Kodierungen sind BOCU-1 und SCSU.
Ein Multibyte-Zeichenstring ist layout-kompatibel mit einem null-terminierten Byte-String (NTBS), d.h. er kann mit denselben Mitteln gespeichert, kopiert und untersucht werden, mit Ausnahme der Berechnung der Zeichenanzahl. Wenn die richtige Locale aktiv ist, verarbeiten auch I/O-Funktionen Multibyte-Strings. Multibyte-Strings können mit den folgenden Locale-abhängigen Konvertierungsfunktionen in und aus Wide-Strings konvertiert werden:
Inhalt |
[bearbeiten] Funktionen
Multibyte-/Wide-Zeichenkonvertierungen | |
| Definiert im Header
<stdlib.h> | |
| gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück (Funktion) | |
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen (Funktion) | |
| (C11) |
konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung (Funktion) |
| (C11) |
konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String (Funktion) |
| (C11) |
konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring (Funktion) |
| Definiert in Header
<wchar.h> | |
| (C95) |
prüft, ob das mbstate_t-Objekt den initialen Shift-Zustand repräsentiert (Funktion) |
| (C95) |
erweitert ein ein Byte breites schmales Zeichen zu einem Wide-Zeichen, falls möglich (Funktion) |
| (C95) |
verengt ein Wide-Zeichen zu einem ein Byte breiten schmalen Zeichen, falls möglich (Funktion) |
| (C95) |
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück, gegeben den Zustand (Funktion) |
| (C95) |
konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand (Funktion) |
| (C95)(C11) |
konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung, gegeben den Zustand (Funktion) |
| (C95)(C11) |
konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String, gegeben den Zustand (Funktion) |
| (C95)(C11) |
konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring, gegeben den Zustand (Funktion) |
| Definiert im Header
<uchar.h> | |
| (C23) |
konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung (Funktion) |
| (C23) |
konvertiert einen UTF-8-String in eine schmale Multibyte-Kodierung (Funktion) |
| (C11) |
konvertiert ein schmales Multibyte-Zeichen in UTF-16-Kodierung (Funktion) |
| (C11) |
konvertiert ein UTF-16-Zeichen in eine schmale Multibyte-Kodierung (Funktion) |
| (C11) |
konvertiert ein schmales Multibyte-Zeichen in UTF-32-Kodierung (Funktion) |
| (C11) |
konvertiert ein UTF-32-Zeichen in eine schmale Multibyte-Kodierung (Funktion) |
[bearbeiten] Typen
| Definiert im Header
<uchar.h> | |
| Definiert in Header
<wchar.h> | |
| (C95) |
Konvertierungsinformationen, die zum Iterieren über Multibyte-Zeichenstrings benötigt werden (Klasse) |
| Definiert im Header
<uchar.h> | |
| (C23) |
8-Bit-Zeichentyp (Typedef) |
| (C11) |
16-Bit-Zeichentyp (Typedef) |
| (C11) |
32-Bit-Zeichentyp (Typedef) |
[bearbeiten] Makros
| Definiert im Header
<limits.h> | |
| MB_LEN_MAX |
maximale Anzahl von Bytes in einem Multibyte-Zeichen für jede unterstützte Locale (Makrokonstante) |
| Definiert im Header
<stdlib.h> | |
| MB_CUR_MAX |
maximale Anzahl von Bytes in einem Multibyte-Zeichen in der aktuellen Locale (Makrovariable) |
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.10 Größen von Ganzzahltypen <limits.h> (S. TBD)
- 7.22 Allgemeine Dienstprogramme <stdlib.h> (S: TBD)
- 7.28 Unicode-Dienstprogramme <uchar.h> (S. TBD)
- 7.29 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. TBD)
- 7.31.12 Allgemeine Dienstprogramme <stdlib.h> (S: TBD)
- 7.31.16 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. TBD)
- K.3.6 Allgemeine Dienstprogramme <stdlib.h> (S. TBD)
- K.3.9 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.10 Größen von Ganzzahltypen <limits.h> (S. TBD)
- 7.22 Allgemeine Dienstprogramme <stdlib.h> (S: TBD)
- 7.28 Unicode-Dienstprogramme <uchar.h> (S. TBD)
- 7.29 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. TBD)
- 7.31.12 Allgemeine Dienstprogramme <stdlib.h> (S: TBD)
- 7.31.16 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. TBD)
- K.3.6 Allgemeine Dienstprogramme <stdlib.h> (S. TBD)
- K.3.9 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. TBD)
- C11-Standard (ISO/IEC 9899:2011)
- 7.10 Größen von Ganzzahltypen <limits.h> (S. 222)
- 7.22 Allgemeine Dienstprogramme <stdlib.h> (S. 340-360)
- 7.28 Unicode-Dienstprogramme <uchar.h> (S. 398-401)
- 7.29 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. 402-446)
- 7.31.12 Allgemeine Dienstprogramme <stdlib.h> (S. 456)
- 7.31.16 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. 456)
- K.3.6 Allgemeine Dienstprogramme <stdlib.h> (S. 604-614)
- K.3.9 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. 627-651)
- C99-Standard (ISO/IEC 9899:1999)
- 7.10 Größen von Ganzzahltypen <limits.h> (S. 203)
- 7.20 Allgemeine Dienstprogramme <stdlib.h> (S. 306-324)
- 7.24 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. 348-392)
- 7.26.10 Allgemeine Dienstprogramme <stdlib.h> (S. 402)
- 7.26.12 Erweiterte Multibyte- und Wide-Zeichen-Dienstprogramme <wchar.h> (S. 402)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.1.4 Limits <float.h> und <limits.h>
- 4.10 ALLGEMEINE DIENSTPROGRAMME <stdlib.h>
- 4.13.7 Allgemeine Dienstprogramme <stdlib.h>
[bearbeiten] Siehe auch
| C++ Dokumentation für Null-terminierte Multibyte-Strings
|