std:: mbrlen
|
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
|
|