Namespaces
Variants

mbrtoc8

From cppreference.net
Определено в заголовочном файле <uchar.h>
size_t mbrtoc8 ( char8_t * restrict pc8, const char * restrict s, size_t n,
mbstate_t * restrict ps ) ;
(начиная с C23)

Преобразует узкий многобайтовый символ в кодировку 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 игнорируются, и вызов эквивалентен mbrtoc8 ( nullptr, "" , 1 , ps ) .

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

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

Содержание

Параметры

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

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

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

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

Пример

Ссылки

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

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

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