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

Функция 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 Многобайтовые символы = ݣݗݿݟ

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