Функция wcsrtombs () в C ++ преобразует широкую последовательность символов в узкую многобайтовую последовательность символов.
Функция wcsrtombs () определена в заголовочном файле.
wcsrtombs () прототип
size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);
Функция wcsrtombs () преобразует строку широких символов, представленную * src, в соответствующую строку многобайтовых символов и сохраняется в массиве символов, на который указывает dest, если dest не равен нулю. В dest записывается максимум len символов.
Процесс преобразования аналогичен многократному вызову wcrtomb (). Преобразование прекращается, если:
- Был преобразован и сохранен широкий нулевой символ. В этом случае для src установлено значение NULL, а ps представляет начальное состояние сдвига.
- Обнаружен недопустимый широкий символ. В этом случае src устанавливается так, чтобы указывать на начало первого непреобразованного широкого символа.
- len байтов было сохранено в dest. В этом случае src устанавливается так, чтобы указывать на начало первого непреобразованного широкого символа.
Параметры wcsrtombs ()
- > dest: указатель на массив символов, в котором хранится преобразованный многобайтовый символ.
- src: указатель на первый преобразованный широкий символ.
- len: Максимальное количество байтов, доступных в массиве dest.
- ps: указатель на объект состояния преобразования.
wcsrtombs () Возвращаемое значение
- В случае успеха функция wcsrtombs () возвращает количество многобайтовых символов, записанных в dest, за исключением завершающего широкого нулевого символа, но включая последовательности сдвига.
Если dest является нулевым указателем, он возвращает количество широких символов, которые были бы записаны, за исключением завершающего нулевого символа. - При ошибке преобразования возвращается -1, а для errno устанавливается значение EILSEQ .
Пример: как работает функция wcsrtombs ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const wchar_t* wstr = L"u0763u0757u077fu075f"; char str(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = wcsrtombs(str, &wstr, len, &ps); cout << "Number of multibyte characters written (excluding "\0 ") = " << retVal << endl; cout << "Multibyte character = " << str << endl; return 0; )
Когда вы запустите программу, вывод будет:
Количество записанных многобайтовых символов (исключая " 0") = 8 Многобайтовые символы = ݣݗݿݟ