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 байти багатобайтового символу. Результат широкого символу µ Перетворений широкий символ є нульовим широким символом

Цікаві статті...