Namespaces
Variants

c8rtomb

From cppreference.net
Определено в заголовочном файле <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.

Содержание

Параметры

s - указатель на массив узких символов, где будет сохранен многобайтовый символ
c8 - кодовая единица UTF-8 для преобразования
ps - указатель на объект состояния преобразования, используемый при интерпретации многобайтовой строки

Возвращаемое значение

Количество байтов, хранящихся в объекте массива (включая любые сдвиговые последовательности). Это может быть нулевым, когда c8 не является конечной кодовой единицей в UTF-8 представлении кодовой точки.

Если c8 некорректен (не вносит вклад в последовательность char8_t , соответствующую корректному многобайтовому символу), значение макроса EILSEQ сохраняется в errno , ( size_t ) - 1 возвращается, и состояние преобразования не определено.

Примечания

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

Пример

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.30.1.2 Функция c8rtomb

Смотрите также

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