C ++ wcsrtombs () - C ++ standaardbibliotheek

De functie wcsrtombs () in C ++ converteert een brede tekenreeks naar een smalle multibyte-tekenreeks.

De functie wcsrtombs () is gedefinieerd in het headerbestand.

wcsrtombs () prototype

 size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);

De functie wcsrtombs () converteert de brede tekenreeks weergegeven door * src naar de corresponderende multibyte-tekenreeks en wordt opgeslagen in de tekenreeks waarnaar wordt verwezen door dest als dest niet nul is. Er worden maximaal len karakters geschreven naar dest.

Het conversieproces is vergelijkbaar met het herhaaldelijk aanroepen van wcrtomb (). De conversie stopt als:

  • Een breed nul-teken werd geconverteerd en opgeslagen. In dit geval wordt src ingesteld op null en staat ps voor de initiële schakelstatus.
  • Er is een ongeldig breed teken aangetroffen. In dit geval wordt src ingesteld om het begin van het eerste niet-geconverteerde brede teken te wijzen.
  • len bytes zijn opgeslagen in dest. In dit geval wordt src ingesteld om het begin van het eerste niet-geconverteerde brede teken te wijzen.

wcsrtombs () Parameters

  • > dest: Pointer naar de tekenreeks waarin het geconverteerde multibyte-teken is opgeslagen.
  • src: pointer naar pointer naar het eerste brede teken dat moet worden geconverteerd.
  • len: Maximaal aantal bytes beschikbaar in de dest-array.
  • ps: Pointer naar het conversiestatusobject.

wcsrtombs () Retourwaarde

  • Bij succes retourneert de functie wcsrtombs () het aantal multibyte-tekens dat naar dest is geschreven, met uitzondering van het eindigende brede nul-teken maar inclusief verschuivingsreeksen.
    Als dest een null-pointer is, retourneert het het aantal brede tekens dat zou zijn geschreven zonder het afsluitende null-teken.
  • Bij een conversiefout wordt -1 geretourneerd en wordt errno ingesteld op EILSEQ .

Voorbeeld: hoe werkt de functie wcsrtombs ()?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const wchar_t* wstr = L"u0763u0757u077fu075f"; char str(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = wcsrtombs(str, &wstr, len, &ps); cout << "Number of multibyte characters written (excluding "\0 ") = " << retVal << endl; cout << "Multibyte character = " << str << endl; return 0; )

Wanneer u het programma uitvoert, is de uitvoer:

 Aantal geschreven multibyte-tekens (exclusief " 0") = 8 Multibyte-tekens = ݣݗݿݟ

Interessante artikelen...