C ++ mbrtowc () - štandardná knižnica C ++

Funkcia mbrtowc () v C ++ prevádza úzky viacbajtový znak na široký znak (typu wchar_t).

Funkcia mbrtowc () je definovaná v hlavičkovom súbore.

mbrtowc () prototyp

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

Funkcia mbrtowc () prevádza viacbajtový znak predstavovaný s na široký znak a je uložená na adrese, na ktorú ukazuje pwc.

  • Ak s nie je nulový ukazovateľ, skúma sa maximálne n bajtov začínajúcich od bajtu, na ktorý ukazuje s, aby sa určil počet bajtov potrebný na dokončenie ďalšieho viacbytového znaku (vrátane akýchkoľvek posúvacích sekvencií).
    Ak je ďalších n viacbajtových znakov v s úplné a platné, funkcia ho prevedie na zodpovedajúci široký znak a uloží sa na miesto, na ktoré ukazuje pwc.
  • Ak je s nulový ukazovateľ, parametre n a pwc nemajú nič spoločné s volaním funkcie a volanie je ekvivalentné s std::mbrtowc(NULL, "", 1, ps).
  • Ak je produkovaný široký znak nulový znak, stav konverzie uložený v * ps je počiatočný stav posunu.

Parametre mbrtowc ()

  • pwc: Ukazovateľ na adresu pamäte, kde je uložený prevedený široký znak.
  • s: Ukazovateľ na viacbajtový znak, ktorý sa má previesť.
  • n: Maximálny počet bajtov v s na preskúmanie.
  • ps: Ukazovateľ na stav konverzie použitý pri interpretácii viacbytového reťazca

mbrtowc () Vrátená hodnota

Funkcia mbrtowc () vráti prvý z nasledujúcich platných:

  • 0, ak je široký znak prepočítaný zo s null (ak pwc null nie je).
  • Počet viacbajtových znakov úspešne prevedených z s.
  • -2, ak nasledujúcich n bajtov nepredstavuje úplný viacbajtový znak.
  • -1 je chyba kódovania, errno je nastavené na EILSEQ .

Príklad: Ako funguje funkcia mbrtowc ()?

 #include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = ""; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )

Po spustení programu bude výstup:

 Nasledujúcich 1 bajtov nepredstavuje úplný viacbajtový znak Nasledujúcich 5 bajtov obsahuje 2 bajty viacbajtového znaku, výsledný široký znak je µ Konvertovaný široký znak je prázdny široký znak

Zaujímavé články...