Ц ++ мбртовц () - Ц ++ стандардна библиотека

Функција мбртовц () у Ц ++ претвара уски вишебајтни карактер у широки (типа вцхар_т).

Функција мбртовц () је дефинисана у датотеци заглавља.

мбртовц () прототип

 сизе_т мбртовц (вцхар_т * пвц, цонст цхар * с, сизе_т н, мбстате_т * пс);

Функција мбртовц () претвара вишебајтни знак представљен с у широк знак и чува се на адреси на коју указује пвц.

  • Ако с није нулл показивач, испитује се највише н бајтова почев од бајта на који показује с да би се утврдио број бајтова неопходних за довршавање следећег вишебајтног знака (укључујући било које секвенце померања).
    Ако је следећи н вишебајтних знакова у с потпун и важећи, функција га претвара у одговарајући широки знак и чува се на месту на које указује пвц.
  • Ако је с нулти показивач, параметри н и пвц немају никакве везе са позивом функције и позив је еквивалентан std::mbrtowc(NULL, "", 1, ps).
  • Ако је произведени широки знак нулти карактер, стање конверзије сачувано у * пс је почетно стање померања.

мбртовц () Параметри

  • пвц: Показивач на меморијску адресу на којој се чува претворени широки знак.
  • с: Показивач на вишебајтни знак који желите претворити.
  • н: Максималан број бајтова у с за испитивање.
  • пс: Показивач на стање конверзије које се користи приликом тумачења вишебајтног низа

мбртовц () Повратна вредност

Функција мбртовц () враћа прво од следећег које је важеће:

  • 0 ако је широки знак претворен из с нулл (ако пвц није нулл).
  • Број мултибајтних знакова успешно претворен из с.
  • -2 ако следећих н бајтова не представља комплетан вишебајтни знак.
  • -1 долази до грешке у кодирању, еррно је постављено на ЕИЛСЕК .

Пример: Како функционише функција мбртовц ()?

 #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; )

Када покренете програм, излаз ће бити:

 Следећих 1 бајт (и) не представљају комплетан вишебајтни знак Следећих 5 бајтова (а) садрже 2 бајта вишебајтног карактера, резултујући широк знак је µ Конвертовани широки знак је нула широк знак

Занимљиви Чланци...