C ++ mbrtowc () - C ++ standarta bibliotēka

Funkcija mbrtowc () C ++ pārveido šauru daudzbaitu rakstzīmi par plašu raksturu (tipa wchar_t).

Funkcija mbrtowc () ir definēta galvenes failā.

mbrtowc () prototips

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

Funkcija mbrtowc () pārveido multibaitu rakstzīmi, ko apzīmē s, par plašu rakstzīmi un tiek saglabāta adresē, uz kuru norāda pwc.

  • Ja s nav nulles rādītājs, tiek pārbaudīts ne vairāk kā n baitu, sākot no baita, uz kuru norāda s, lai noteiktu baitu skaitu, kas nepieciešams nākamā daudzbaitu rakstzīmes (ieskaitot visas nobīdes secības) pabeigšanai.
    Ja nākamais n daudzbaitu rakstzīme s ir pilnīga un derīga, funkcija to pārvērš par atbilstošo plašo rakstzīmi un tiek saglabāta vietā, uz kuru norāda pwc.
  • Ja s ir nulles rādītājs, parametriem n un pwc nav nekāda sakara ar funkcijas izsaukumu, un izsaukums ir līdzvērtīgs std::mbrtowc(NULL, "", 1, ps).
  • Ja izveidotais platais raksturs ir nulles raksturs, * ps saglabāts konversijas stāvoklis ir sākotnējais nobīdes stāvoklis.

mbrtowc () parametri

  • pwc: rādītājs uz atmiņas adresi, kur tiek glabāts konvertētais platais raksturs.
  • s: rādītājs, lai pārveidotu daudzbaitu rakstzīmi.
  • n: maksimālais pārbaudāmo baitu skaits s.
  • ps: rādītājs konversijas stāvoklī, ko izmanto, interpretējot daudzbaitu virkni

mbrtowc () Atgriežamā vērtība

Funkcija mbrtowc () atgriež pirmo derīgo:

  • 0, ja no s konvertētais platais rakstzīme ir nulle (ja pwc nav nulle).
  • Vairāku baitu rakstzīmju skaits, kas veiksmīgi pārveidots no s.
  • -2, ja nākamie n baiti neatspoguļo pilnīgu daudzbaitu rakstzīmi.
  • -1 ir kodēšanas kļūda, kļūdas iestatījums ir EILSEQ .

Piemērs: Kā darbojas funkcija 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; )

Palaidot programmu, izeja būs:

 Nākamais (-ie) baits (-i) neatspoguļo pilnīgu daudzbaitu rakstzīmi. Nākamie 5 baiti (-i) satur 2 baitus daudzbaitu rakstzīmes. Rezultātā iegūtais platais raksturs ir

Interesanti raksti...