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

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

Функция mbsrtowcs () определена в заголовочном файле.

mbsrtowcs () прототип

 size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);

Функция mbsrtowcs () преобразует многобайтовую символьную строку, первый байт которой представлен как * src, в соответствующее представление широких символов и сохраняется в массиве широких символов, на который указывает dest. В dest записывается не более len символов.

Процесс преобразования аналогичен многократному вызову mbrtowc (). Преобразование прекращается, если:

  • Был преобразован и сохранен многобайтовый нулевой символ. В этом случае для src установлено значение NULL, а ps представляет начальное состояние сдвига.
  • Обнаружен недопустимый многобайтовый символ. В этом случае src устанавливается так, чтобы указывать на начало первого непреобразованного многобайтового символа.
  • Широкий символ len был сохранен в dest. В этом случае src устанавливается так, чтобы указывать на начало первого непреобразованного многобайтового символа.

Параметры mbsrtowcs ()

  • dest: указатель на массив, в котором хранится преобразованный широкий символ.
  • src: указатель на указатель на первый многобайтовый символ для преобразования.
  • len: Максимальное количество сохраняемых символов.
  • ps: указатель на состояние преобразования, используемый при интерпретации многобайтовой строки

mbsrtowcs () Возвращаемое значение

  • В случае успеха функция mbsrtowcs () возвращает количество широких символов, записанных в dest, за исключением завершающего широкого нулевого символа. Если dest является нулевым указателем, он возвращает количество широких символов, которые были бы записаны с учетом неограниченной длины.
  • При ошибке преобразования возвращается -1, а для errno устанавливается значение EILSEQ .

Пример: как работает функция mbsrtowcs ()?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const char* str = "u0763u0757u077fu075f"; wchar_t wstr(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = mbsrtowcs(wstr, &str, len, &ps); wcout << L"Number of wide characters written (excluding L "\0 ") = " << retVal << endl; wcout << L"Wide character = " << wstr << endl; return 0; )

Когда вы запустите программу, вывод будет:

 Количество написанных широких символов (исключая L " 0") = 4 Широкие символы = ݣݗݿݟ

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