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 байта многобайтового символа, результирующий широкий символ µ Преобразованный широкий символ является нулевым широким символом

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