std::mbrlen
Von cppreference.com
| Definiert in Header <cwchar> |
||
| std::size_t mbrlen( const char* s, std::size_t n, std::mbstate_t* ps); |
||
Ermittelt die Grösse des verbleibenden Multibyte-Zeichens in Bytes, auf dessen erstes Byte von s gezeigt wird, gegeben den aktuellen Konvertierungsstatus ps.
Diese Funktion ist äquivalent zum Aufruf std::mbrtowc(nullptr, s, n, ps ? ps : &internal) für ein verstecktes Objekt internal vom Typ std::mbstate_t, mit der Ausnahme, dass der Ausdruck ps nur einmal ausgewertet wird.
Inhalt |
[edit] Parameter
| s | - | Zeiger auf ein Element einer Multibyte-Zeichenzeichenkette |
| n | - | Grenze für die Anzahl der Bytes in s, die untersucht werden können |
| ps | - | Zeiger auf die Variable, die den Konvertierungsstatus speichert |
[edit] 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), wenn ein Kodierungsfehler auftritt.
- std::size_t(-2), wenn die nächsten n Bytes Teil eines möglicherweise gültigen Multibyte-Zeichens sind, das auch nach der Untersuchung aller n Bytes noch unvollständig ist.
[edit] Beispiel
Führen Sie diesen Code aus
#include <clocale> #include <cwchar> #include <iostream> #include <string> int main() { // allow mbrlen() to work with UTF-8 multibyte encoding std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding std::string str = "水"; // or u8"\u6c34" or "\xe6\xb0\xb4" std::mbstate_t mb = std::mbstate_t(); // simple use: length of a complete multibyte character const std::size_t len = std::mbrlen(&str[0], str.size(), &mb); std::cout << "The length of " << str << " is " << len << " bytes\n"; // advanced use: restarting in the middle of a multibyte character const std::size_t len1 = std::mbrlen(&str[0], 1, &mb); if (len1 == std::size_t(-2)) std::cout << "The first 1 byte of " << str << " is an incomplete multibyte char (mbrlen returns -2)\n"; const std::size_t len2 = std::mbrlen(&str[1], str.size() - 1, &mb); std::cout << "The remaining " << str.size() - 1 << " bytes of " << str << " hold " << len2 << " bytes of the multibyte character\n"; // error case: std::cout << "Attempting to call mbrlen() in the middle of " << str << " while in initial shift state returns " << (int)mbrlen(&str[1], str.size(), &mb) << '\n'; }
Ausgabe
The length of 水 is 3 bytes. The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2) The remaining 2 bytes of 水 hold 2 bytes of the multibyte character Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1
[edit] Siehe auch
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand (Funktion) | |
| gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück (Funktion) | |
| [virtuell] |
berechnet die Länge der ExternT-Zeichenkette, die bei der Konvertierung in den gegebenen InternT-Puffer verbraucht würde(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) |
| C-Dokumentation für mbrlen
| |