Spec-Zone.ru › C++

std::c8rtomb

Определён в заголовочном файле <cuchar>
std::size_t c8rtomb( char* s, char8_t c8, std::mbstate_t* ps );
(начиная с C++20)

Преобразует одну кодовую точку из UTF-8 в представление узкого многобайтового символа.

Если s не является нулевым указателем и c8 является последней кодовой единицей в корректной кодировке UTF-8 кодовой точки, функция определяет количество байтов, необходимых для хранения представления многобайтового символа этой кодовой точки (включая любые последовательности переключения и с учётом текущего состояния многобайтового преобразования *ps), и сохраняет представление многобайтового символа в массиве символов, первый элемент которого указывает s, обновляя *ps при необходимости. Эта функция может записать не более MB_CUR_MAX байтов.

Если c8 не является последней кодовой единицей в представлении кодовой точки, функция не записывает данные в массив, на который указывает s, а обновляется только *ps.

Если s является нулевым указателем, вызов эквивалентен std::c8rtomb(buf, u8'\0', ps) для некоторого внутреннего буфера buf.

Если c8 является нулевым символом u8'\0', сохраняется нулевой байт, которому предшествует любая последовательность переключения, необходимая для восстановления исходного состояния переключения, а параметр состояния преобразования *ps обновляется для представления исходного состояния переключения.

Многобайтовая кодировка, используемая этой функцией, определяется текущей активной локалью C.

Параметры

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
(функция)
c16rtomb
(C++11)
преобразует символ UTF-16 в узкую многобайтовую кодировку
(функция)
Документация по C для c8rtomb

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/multibyte/c8rtomb

Spec-Zone.ru

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