std::wcsrtombs
| Definiert in Header <cwchar> |
||
| std::size_t wcsrtombs( char* dst, const wchar_t** src, |
||
Konvertiert eine Sequenz von Weitzeichen aus dem Array, dessen erstes Element von *src gezeigt wird, in ihre schmale Multibyte-Darstellung, die im Konvertierungsstatus *ps beschrieben wird. Wenn dst nicht null ist, werden konvertierte Zeichen in den aufeinanderfolgenden Elementen des von dst gezeigten Char-Arrays gespeichert. Es werden nicht mehr als len Bytes in das Zielarray geschrieben.
Jedes Zeichen wird konvertiert, als ob es durch einen Aufruf von std::wcrtomb erfolgen würde. Die Konvertierung stoppt, wenn
- Das Nullzeichen wurde konvertiert und gespeichert. src wird auf einen Nullzeiger gesetzt und *ps repräsentiert den anfänglichen Verschiebezustand.
- Ein wchar_t gefunden wurde, das keinem gültigen Zeichen in der aktuellen C-Locale entspricht. src wird so gesetzt, dass es auf das erste nicht konvertierte Weitzeichen zeigt.
- Das nächste zu speichernde Multibyte-Zeichen würde len überschreiten. src wird so gesetzt, dass es auf das erste nicht konvertierte Weitzeichen zeigt. Diese Bedingung wird nicht geprüft, wenn dst ein Nullzeiger ist.
Inhalt |
[bearbeiten] Parameter
| dst | - | Zeiger auf ein schmales Zeichenarray, in dem die Multibyte-Zeichen gespeichert werden |
| src | - | Zeiger auf einen Zeiger auf das erste Element eines nullterminierten Wide-Strings |
| len | - | Anzahl der Bytes, die im von dst zeigenden Array verfügbar sind |
| ps | - | Zeiger auf das Konvertierungszustandsobjekt |
[bearbeiten] Rückgabewert
Bei Erfolg gibt die Anzahl der Bytes zurück (einschließlich aller Verschiebesequenzen, aber ausschließlich des terminierenden '\0'), die in das Zeichenarray geschrieben wurden, dessen erstes Element von dst gezeigt wird. Wenn dst ein Nullzeiger ist, wird die Anzahl der Bytes zurückgegeben, die geschrieben worden wären (wiederum ohne das terminierende Nullzeichen '\0').
Bei einem Konvertierungsfehler (wenn ein ungültiges Weitzeichen angetroffen wurde) wird static_cast<std::size_t>(-1) zurückgegeben, EILSEQ in errno gespeichert und *ps in einem undefinierten Zustand belassen.
[bearbeiten] Beispiel
#include <clocale> #include <cwchar> #include <iostream> #include <string> #include <vector> void print_wide(const wchar_t* wstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state); std::vector<char> mbstr(len); std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state); std::cout << "multibyte string: " << &mbstr[0] << '\n' << "Length, including '\\0': " << mbstr.size() << '\n'; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋" print_wide(wstr); }
Ausgabe
multibyte string: zß水𝄋 Length, including '\0': 11
[bearbeiten] Siehe auch
| konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung, gegeben den Zustand (Funktion) | |
| konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String, gegeben den Zustand (Funktion) | |
| [virtuell] |
konvertiert eine Zeichenkette von InternT nach ExternT, z. B. beim Schreiben in eine Datei(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) |
| C-Dokumentation für wcsrtombs
| |