Spec-Zone.ru › C++

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.

Пример

См. также

mbrtoc8
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API