Namespaces
Variants

std:: mbrtoc8

From cppreference.net
Определено в заголовочном файле <cuchar>
std:: size_t mbrtoc8 ( char8_t * pc8,

const char * s,
std:: size_t n,

std:: mbstate_t * ps ) ;
(начиная с C++20)

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

Если s не является нулевым указателем, анализирует не более n байт многобайтовой символьной строки, начиная с байта, на который указывает s для определения количества байт, необходимых для завершения следующего многобайтового символа (включая любые последовательности сдвига). Если функция определяет, что следующий многобайтовый символ в s является завершенным и корректным, преобразует его в UTF-8 и сохраняет первую кодовую единицу UTF-8 в * pc8 (если pc8 не является нулевым указателем).

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

Если s является нулевым указателем, значения n и pc8 игнорируются, и вызов эквивалентен std :: mbrtoc8 ( nullptr, "" , 1 , ps ) .

Если создаваемая кодовая единица UTF-8 равна u8 ' \0 ' , состояние преобразования * ps представляет начальное состояние сдвига.

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

Содержание

Параметры

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

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

Первое из следующих условий, которое применяется:

  • 0 если символ, преобразованный из s (и сохранённый в * pc8 если не нулевой), был нулевым символом.
  • количество байт [ 1 ... n ] многобайтового символа, успешно преобразованного из s .
  • static_cast < std:: size_t > ( - 3 ) если следующая кодовая единица UTF-8 из символа, чьё кодирование состоит из нескольких кодовых единиц, была записана в * pc8 . В этом случае никакие байты из входных данных не обрабатываются.
  • static_cast < std:: size_t > ( - 2 ) если следующие n байт составляют неполный, но пока корректный многобайтовый символ. Ничего не записывается в * pc8 .
  • static_cast < std:: size_t > ( - 1 ) если произошла ошибка кодирования. Ничего не записывается в * pc8 , значение EILSEQ сохраняется в errno , а значение * ps не определено.

Пример

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

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