Namensräume
Varianten
Aktionen

std::wcsrtombs

Von cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
Definiert in Header <cwchar>
std::size_t wcsrtombs( char* dst,

                       const wchar_t** src,
                       std::size_t len,

                       std::mbstate_t* ps );

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) [bearbeiten]
konvertiert einen schmalen Multibyte-Zeichenstring in einen Wide-String, gegeben den Zustand
(Funktion) [bearbeiten]
[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>) [edit]
C-Dokumentation für wcsrtombs