Функция 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 Широкие символы = ݣݗݿݟ