Spec-Zone.ru › C

c8rtomb

Определено в заголовочном файле <uchar.h>
size_t c8rtomb( char* restrict s, char8_t c8, mbstate_t* restrict ps );
(с C23)

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

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

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

Если s является нулевым указателем, вызов эквивалентен 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, возвращается (size_t)-1, и состояние преобразования не определено.

Примечания

Вызовы c8rtomb с нулевым указателем аргумента для s могут привести к гонке данных с другими вызовами c8rtomb с нулевым указателем аргумента для s.

Пример

См. также

mbrtoc8
(C23)
преобразует узкий многобайтовый символ в кодировку UTF-8
(функция)
C++ документация для c8rtomb

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

Spec-Zone.ru

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