std:: wcrtomb
|
Определено в заголовочном файле
<cwchar>
|
||
|
std::
size_t
wcrtomb
(
char
*
s,
wchar_t
wc,
std::
mbstate_t
*
ps
)
;
|
||
Преобразует широкий символ в его узкое многобайтовое представление.
Если s не является нулевым указателем, функция определяет количество байт, необходимое для хранения многобайтового представления символа wc (включая любые сдвиговые последовательности и учитывая текущее состояние многобайтового преобразования * ps ), и сохраняет многобайтовое представление символа в массиве символов, на первый элемент которого указывает s , обновляя * ps при необходимости. Функция может записать не более MB_CUR_MAX байт.
Если
s
является нулевым указателем, вызов эквивалентен
std
::
wcrtomb
(
buf, L
'
\0
'
, ps
)
для некоторого внутреннего буфера
buf
.
Если wc является нулевым широким символом L ' \0 ' , сохраняется нулевой байт, которому предшествует любая последовательность сдвига, необходимая для восстановления начального состояния сдвига, и параметр состояния преобразования * ps обновляется для представления начального состояния сдвига.
Содержание |
Параметры
| s | - | указатель на массив узких символов, в который будет сохранён многобайтовый символ |
| wc | - | широкий символ для преобразования |
| ps | - | указатель на объект состояния преобразования, используемый при интерпретации многобайтовой строки |
Возвращаемое значение
При успехе возвращает количество байтов (включая любые сдвиговые последовательности), записанных в массив символов, первый элемент которого указывается s .
При неудаче (если wc не является допустимым широким символом), возвращает static_cast < std:: size_t > ( - 1 ) , сохраняет EILSEQ в errno и оставляет * ps в неопределённом состоянии.
Пример
#include <clocale> #include <cwchar> #include <iostream> #include <string> void print_wide(const std::wstring& wstr) { std::mbstate_t state{}; for (wchar_t wc : wstr) { std::string mb(MB_CUR_MAX, '\0'); std::size_t ret = std::wcrtomb(&mb[0], wc, &state); std::cout << "multibyte char " << mb << " is " << ret << " bytes\n"; } } int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌" print_wide(wstr); }
Вывод:
multibyte char z is 1 bytes multibyte char ß is 2 bytes multibyte char 水 is 3 bytes multibyte char 🍌 is 4 bytes
Смотрите также
|
преобразует широкий символ в многобайтовое представление
(функция) |
|
|
преобразует следующий многобайтовый символ в широкий символ с учетом состояния
(функция) |
|
|
[virtual]
|
преобразует строку из
InternT
в
ExternT
, например, при записи в файл
(виртуальная защищенная функция-член
std::codecvt<InternT,ExternT,StateT>
)
|
|
Документация C
для
wcrtomb
|
|