Namensräume
Varianten
Aktionen

Null-terminierte Multibyte-Strings

Von cppreference.com
< c‎ | string

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) [bearbeiten]
konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen
(Funktion) [bearbeiten]
konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung
(Funktion) [bearbeiten]
konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String
(Funktion) [bearbeiten]
konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring
(Funktion) [bearbeiten]
Definiert in Header <wchar.h>
prüft, ob das mbstate_t-Objekt den initialen Shift-Zustand repräsentiert
(Funktion) [bearbeiten]
(C95)
erweitert ein ein Byte breites schmales Zeichen zu einem Wide-Zeichen, falls möglich
(Funktion) [bearbeiten]
(C95)
verengt ein Wide-Zeichen zu einem ein Byte breiten schmalen Zeichen, falls möglich
(Funktion) [bearbeiten]
(C95)
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück, gegeben den Zustand
(Funktion) [bearbeiten]
konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand
(Funktion) [bearbeiten]
konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung, gegeben den Zustand
(Funktion) [bearbeiten]
konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String, gegeben den Zustand
(Funktion) [bearbeiten]
konvertiert einen Wide-String in einen schmalen Multibyte-Zeichenstring, gegeben den Zustand
(Funktion) [bearbeiten]
Definiert im Header <uchar.h>
konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung
(Funktion) [bearbeiten]
konvertiert einen UTF-8-String in eine schmale Multibyte-Kodierung
(Funktion) [bearbeiten]
konvertiert ein schmales Multibyte-Zeichen in UTF-16-Kodierung
(Funktion) [bearbeiten]
konvertiert ein UTF-16-Zeichen in eine schmale Multibyte-Kodierung
(Funktion) [bearbeiten]
konvertiert ein schmales Multibyte-Zeichen in UTF-32-Kodierung
(Funktion) [bearbeiten]
konvertiert ein UTF-32-Zeichen in eine schmale Multibyte-Kodierung
(Funktion) [bearbeiten]

[bearbeiten] Typen

Definiert im Header <uchar.h>
Definiert in Header <wchar.h>
Konvertierungsinformationen, die zum Iterieren über Multibyte-Zeichenstrings benötigt werden
(Klasse) [bearbeiten]
Definiert im Header <uchar.h>
8-Bit-Zeichentyp
(Typedef) [bearbeiten]
16-Bit-Zeichentyp
(Typedef) [bearbeiten]
32-Bit-Zeichentyp
(Typedef) [bearbeiten]

[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) [bearbeiten]
Definiert im Header <stdlib.h>
MB_CUR_MAX
maximale Anzahl von Bytes in einem Multibyte-Zeichen in der aktuellen Locale
(Makrovariable) [bearbeiten]

[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