C ++ mbrtowc () - standardní knihovna C ++

Funkce mbrtowc () v C ++ převádí úzký vícebajtový znak na široký znak (typu wchar_t).

Funkce mbrtowc () je definována v hlavičkovém souboru.

mbrtowc () prototyp

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

Funkce mbrtowc () převádí vícebajtový znak představovaný s na široký znak a je uložena na adrese, na kterou ukazuje pwc.

  • Pokud s není null ukazatel, zkoumá se maximálně n bajtů počínaje od bajtu, na který ukazuje s, aby se určil počet bajtů potřebných k dokončení dalšího vícebajtového znaku (včetně případných posuvu).
    Pokud je dalších n vícebajtových znaků v s úplné a platné, funkce jej převede na odpovídající široký znak a uloží se do umístění, na které ukazuje pwc.
  • Pokud s je nulový ukazatel, parametry n a pwc nemají nic společného s voláním funkce a volání je ekvivalentní std::mbrtowc(NULL, "", 1, ps).
  • Pokud je vytvořený široký znak nulový znak, stav převodu uložený v * ps je počáteční stav posunu.

mbrtowc () parametry

  • pwc: Ukazatel na adresu paměti, kde je uložen převedený široký znak.
  • s: Ukazatel na vícebajtový znak, který se má převést.
  • n: Maximální počet bajtů v s k prozkoumání.
  • ps: Ukazatel na stav převodu použitý při interpretaci vícebajtového řetězce

mbrtowc () Návratová hodnota

Funkce mbrtowc () vrací první z následujících, které jsou platné:

  • 0, pokud je široký znak převedený ze s null (pokud pwc není null).
  • Počet vícebajtových znaků úspěšně převedených z s.
  • -2, pokud dalších n bajtů nepředstavuje úplný vícebajtový znak.
  • -1 je chyba kódování, errno je nastaveno na EILSEQ .

Příklad: Jak funguje funkce 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; )

Když spustíte program, výstup bude:

 Další 1 bajt nepředstavuje úplný vícebajtový znak Dalších 5 bajtů obsahuje 2 bajty vícebajtového znaku, výsledný široký znak je µ Převedený široký znak je prázdný široký znak

Zajímavé články...