Namespaces
Variants

std:: c8rtomb

From cppreference.net
Определено в заголовочном файле <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 не является конечным кодом UTF-8 в представлении кодовой точки, функция не производит запись в массив, на который указывает 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 .

Пример

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

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