Namespaces
Variants

std:: mbrlen

From cppreference.net
Definiert im Header <cwchar>
std:: size_t mbrlen ( const char * s, std:: size_t n, std:: mbstate_t * ps ) ;

Bestimmt die Größe in Bytes des Rests des Multibyte-Zeichens, dessen erstes Byte auf s zeigt, basierend auf dem aktuellen Konvertierungszustand ps .

Diese Funktion entspricht dem Aufruf std:: mbrtowc ( nullptr, s, n, ps ? ps : & internal ) für ein verborgenes Objekt internal vom Typ std::mbstate_t , mit der Ausnahme, dass der Ausdruck ps nur einmal ausgewertet wird.

Inhaltsverzeichnis

Parameter

s - Zeiger auf ein Element einer Multibyte-Zeichenkette
n - Grenzwert für die Anzahl der Bytes in s, die untersucht werden können
ps - Zeiger auf die Variable, die den Konvertierungszustand enthält

Rückgabewert

  • 0 wenn die nächsten n oder weniger Bytes das Nullzeichen vervollständigen.
  • Die Anzahl der Bytes (zwischen 1 und n ), die ein gültiges Multibyte-Zeichen vervollständigen.
  • std:: size_t ( - 1 ) falls ein Kodierungsfehler auftritt.
  • std:: size_t ( - 2 ) wenn die nächsten n Bytes Teil eines möglicherweise gültigen Multibyte-Zeichens sind, das nach Überprüfung aller n Bytes noch unvollständig ist.

Beispiel

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
int main()
{
    // ermöglicht mbrlen() mit UTF-8 Multibyte-Kodierung zu arbeiten
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 schmale Multibyte-Kodierung
    std::string str = "水"; // or u8"\u6c34" or "\xe6\xb0\xb4"
    std::mbstate_t mb = std::mbstate_t();
    // einfache Verwendung: Länge eines vollständigen Multibyte-Zeichens
    const std::size_t len = std::mbrlen(&str[0], str.size(), &mb);
    std::cout << "Die Länge von " << str << " beträgt " << len << " Bytes\n";
    // erweiterte Verwendung: Neustart in der Mitte eines Multibyte-Zeichens
    const std::size_t len1 = std::mbrlen(&str[0], 1, &mb);
    if (len1 == std::size_t(-2))
        std::cout << "Das erste Byte von " << str
                  << " ist ein unvollständiges Multibyte-Zeichen (mbrlen gibt -2 zurück)\n";
    const std::size_t len2 = std::mbrlen(&str[1], str.size() - 1, &mb);
    std::cout << "Die verbleibenden " << str.size() - 1 << " Bytes von " << str
              << " enthalten " << len2 << " Bytes des Multibyte-Zeichens\n";
    // Fehlerfall:
    std::cout << "Der Versuch, mbrlen() in der Mitte von " << str
              << " im initialen Schaltzustand aufzurufen, gibt "
              << (int)mbrlen(&str[1], str.size(), &mb) << '\n';
}

Ausgabe:

Die Länge von 水 beträgt 3 Bytes.
Das erste Byte von 水 ist ein unvollständiges Multibyte-Zeichen (mbrlen gibt -2 zurück)
Die verbleibenden 2 Bytes von 水 enthalten 2 Bytes des Multibyte-Zeichens
Der Versuch, mbrlen() in der Mitte von 水 im initialen Schaltzustand aufzurufen, gibt -1

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]
berechnet die Länge der ExternT Zeichenkette, die durch Konvertierung in den gegebenen InternT Puffer verbraucht würde
(virtuelle geschützte Elementfunktion von std::codecvt<InternT,ExternT,StateT> )
C-Dokumentation für mbrlen