C ++ mbrtowc () - Стандартна библиотека на C ++

Функцията mbrtowc () в C ++ преобразува тесен многобайтов символ в широк символ (от тип wchar_t).

Функцията mbrtowc () е дефинирана в заглавния файл.

mbrtowc () прототип

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

Функцията mbrtowc () преобразува многобайтовия символ, представен от s, в широк символ и се съхранява в адреса, посочен от pwc.

  • Ако s не е нулев указател, се проверяват максимум n байта, започвайки от байта, посочен към s, за да се определи броят на байтовете, необходими за завършване на следващия многобайтов символ (включително всички последователности на смяна).
    Ако следващият n многобайтов символ в s е пълен и валиден, функцията го преобразува в съответния широк символ и се съхранява на мястото, посочено от pwc.
  • Ако s е нулев указател, параметрите n и pwc нямат нищо общо с повикването на функцията и повикването е еквивалентно на std::mbrtowc(NULL, "", 1, ps).
  • Ако произведеният широк символ е нула, състоянието на преобразуване, съхранено в * ps, е първоначалното състояние на изместване.

mbrtowc () Параметри

  • pwc: Показалец към адреса на паметта, където се съхранява преобразуваният широк символ.
  • s: Посока към многобайтовия знак за конвертиране.
  • n: Максимален брой байтове в s за изследване.
  • ps: указател към състоянието на преобразуване, използвано при интерпретиране на многобайтовия низ

mbrtowc () Върната стойност

Функцията mbrtowc () връща първото от следните, което е валидно:

  • 0, ако широкият символ, преобразуван от s, е нула (ако pwc не е нула).
  • Броят на многобайтовия знак, успешно преобразуван от s.
  • -2, ако следващите n байта не представляват пълен многобайтов знак.
  • -1 се появява грешка в кодирането, errno е зададено на EILSEQ .

Пример: Как работи функцията 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; )

Когато стартирате програмата, изходът ще бъде:

 Следващите 1 байт (и) не представляват пълен многобайтов знак Следващите 5 байта (и) съдържат 2 байта многобайтови символи, Полученият широк знак е µ Преобразуваният широк знак е нулев широк знак

Интересни статии...