std:: wcsrtombs
|
Definiert im Header
<cwchar>
|
||
|
std::
size_t
wcsrtombs
(
char
*
dst,
const
wchar_t
**
src,
|
||
Konvertiert eine Sequenz von Breitzeichen aus dem Array, dessen erstes Element durch * src gezeigt wird, in ihre schmale Multibyte-Darstellung, die im durch * ps beschriebenen Konvertierungszustand beginnt. Falls dst nicht null ist, werden konvertierte Zeichen in den aufeinanderfolgenden Elementen des char-Arrays gespeichert, auf das durch dst gezeigt wird. Es werden nicht mehr als len Bytes in das Zielarray geschrieben.
Jedes Zeichen wird konvertiert, als ob durch einen Aufruf von std::wcrtomb . Die Konvertierung wird beendet, wenn:
- Das Nullzeichen wurde konvertiert und gespeichert. src wird auf einen Nullzeiger gesetzt und * ps repräsentiert den initialen Shift-Zustand.
- Es wurde ein wchar_t gefunden, der keinem gültigen Zeichen im aktuellen C-Locale entspricht. src wird so gesetzt, dass es auf das erste nicht konvertierte Breitzeichen zeigt.
- Das nächste zu speichernde Multibyte-Zeichen würde len überschreiten. src wird so gesetzt, dass es auf das erste nicht konvertierte Breitzeichen zeigt. Dieser Zustand wird nicht überprüft, wenn dst ein Nullzeiger ist.
Inhaltsverzeichnis |
Parameter
| dst | - | Zeiger auf das schmale Zeichenarray, in dem die Multibyte-Zeichen gespeichert werden |
| src | - | Zeiger auf den Zeiger zum ersten Element eines nullterminierten Breitzeichen-Strings |
| len | - | Anzahl der im Array verfügbaren Bytes, auf das dst zeigt |
| ps | - | Zeiger auf das Konvertierungszustandsobjekt |
Rückgabewert
Bei Erfolg gibt die Anzahl der Bytes (einschließlich aller Shift-Sequenzen, jedoch ausschließlich des abschließenden ' \0 ' ) zurück, die in das Zeichenarray geschrieben wurden, dessen erstes Element durch dst gezeigt wird. Wenn dst ein Nullzeiger ist, gibt die Anzahl der Bytes zurück, die geschrieben worden wären (wiederum ohne den abschließenden Nullterminator ' \0 ' ).
Bei Konvertierungsfehler (falls ein ungültiges Breitzeichen angetroffen wurde), gibt static_cast < std:: size_t > ( - 1 ) zurück, speichert EILSEQ in errno und belässt * ps in einem nicht spezifizierten Zustand.
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
Siehe auch
|
wandelt ein Breitzeichen in seine Multibyte-Darstellung um, unter Berücksichtigung des Zustands
(Funktion) |
|
|
wandelt eine schmale Multibyte-Zeichenkette in eine Breitzeichenkette um, unter Berücksichtigung des Zustands
(Funktion) |
|
|
[virtual]
|
wandelt eine Zeichenkette von
InternT
zu
ExternT
um, beispielsweise beim Schreiben in eine Datei
(virtuelle geschützte Elementfunktion von
std::codecvt<InternT,ExternT,StateT>
)
|
|
C-Dokumentation
für
wcsrtombs
|
|