std::c8rtomb
Defined in header <cuchar> |
||
|---|---|---|
std::size_t c8rtomb( char* s, char8_t c8, std::mbstate_t* ps ); |
(since C++20) |
Преобразует одиночный код из UTF-8 в представление узкого многобайтового символа.
Если s не является нулевым указателем и c8 является последним кодовым элементом в корректном кодировании UTF-8 кодовой точки, функция определяет количество байтов, необходимое для хранения представления многобайтового символа этой кодовой точки (включая все последовательности смены, и учитывая текущее состояние преобразования многобайтовых символов *ps), и сохраняет представление многобайтового символа в массиве символов, первый элемент которого указан в s, обновляя *ps при необходимости. Данная функция может записать не более MB_CUR_MAX байтов.
Если c8 не является последним кодовым элементом UTF-8 в представлении кодовой точки, функция не записывает в массив, на который указывает s, только *ps обновляется.
Если s является нулевым указателем, вызов эквивалентен std::c8rtomb(buf, u8'\0', ps) для некоторого внутреннего буфера buf.
Если c8 представляет собой нулевой символ u8'\0', сохраняется нулевой байт, перед которым могут идти необходимые последовательности смены для восстановления начального состояния смены, и параметр состояния преобразования *ps обновляется, чтобы отразить начальное состояние смены.
Многобайтовое кодирование, используемое этой функцией, определяется текущим активным языковым окружением (C locale).
Параметры
| s | - | указатель на массив узких символов, где будет храниться многобайтовый символ |
| c8 | - | кодовый элемент UTF-8 для преобразования |
| ps | - | указатель на объект состояния преобразования, используемый при интерпретации многобайтовой строки |
Возвращаемое значение
Количество байтов, сохранённых в массиве (включая все последовательности смены). Может быть равно нулю, когда c8 не является последним кодовым элементом в представлении кодовой точки в UTF-8.
Если c8 некорректен (не является частью последовательности char8_t, соответствующей валидному многобайтовому символу), значение макроса EILSEQ сохраняется в errno, возвращается static_cast<std::size_t>(-1), а состояние преобразования не определено.
Примечания
Вызовы c8rtomb с аргументом-нулевым указателем для s могут привести к гонке данных с другими вызовами c8rtomb с аргументом-нулевым указателем для s.
Пример
См. также
|
(C++20) |
преобразует узкий многобайтовый символ в кодировку UTF-8 (функция) |
C документация для c8rtomb |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/multibyte/c8rtomb