Namespaces
Variants

std:: mbtowc

From cppreference.net
Definiert im Header <cstdlib>
int mbtowc ( wchar_t * pwc, const char * s, std:: size_t n ) ;

Konvertiert ein Multibyte-Zeichen, dessen erstes Byte auf s zeigt, in ein Breitzeichen, geschrieben nach * pwc falls pwc nicht null ist.

Wenn s ein Nullzeiger ist, setzt es den globalen Konvertierungszustand zurück und bestimmt, ob Schiebesequenzen verwendet werden.

Inhaltsverzeichnis

Parameter

s - Zeiger auf das Multibyte-Zeichen
n - Begrenzung der Anzahl der Bytes in s, die untersucht werden können
pwc - Zeiger auf das Breitzeichen für die Ausgabe

Rückgabewert

Wenn s kein Nullzeiger ist, gibt die Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder - 1 wenn die ersten von s gezeigten Bytes kein gültiges Multibyte-Zeichen bilden, oder 0 wenn s auf das Nullzeichen ' \0 ' zeigt.

Wenn s ein Nullzeiger ist, setzt es seinen internen Konvertierungszustand zurück, um den anfänglichen Shift-Zustand darzustellen, und gibt 0 zurück, wenn die aktuelle Multibyte-Kodierung zustandsunabhängig ist (keine Shift-Sequenzen verwendet), oder einen Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Shift-Sequenzen verwendet).

Hinweise

Jeder Aufruf von mbtowc aktualisiert den internen globalen Konvertierungszustand (ein statisches Objekt vom Typ std::mbstate_t , der nur dieser Funktion bekannt ist). Wenn die Multibyte-Kodierung Shift-Zustände verwendet, muss darauf geachtet werden, Backtracking oder mehrfaches Scannen zu vermeiden. In jedem Fall sollten mehrere Threads mbtowc nicht ohne Synchronisierung aufrufen: std::mbrtowc kann stattdessen verwendet werden.

Beispiel

#include <clocale>
#include <cstdlib>
#include <cstring>
#include <iostream>
int print_mb(const char* ptr)
{
    std::mbtowc(nullptr, 0, 0); // Konvertierungsstatus zurücksetzen
    const char* end = ptr + std::strlen(ptr);
    int ret{};
    for (wchar_t wc; (ret = std::mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret)
        std::wcout << wc;
    std::wcout << '\n';
    return ret;
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 schmale Multibyte-Kodierung
    const char* str = "z\u00df\u6c34\U0001d10b"; // oder "zß水𝄋"
                      // oder "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
    print_mb(str);
}

Ausgabe:

zß水𝄋

Siehe auch

wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion)
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion)
[virtual]
konvertiert eine Zeichenkette von ExternT zu InternT , beispielsweise beim Lesen aus einer Datei
(geschützte virtuelle Memberfunktion von std::codecvt<InternT,ExternT,StateT> )
C-Dokumentation für mbtowc