Spec-Zone.ru › C

mbrtoc8

Определено в заголовке <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 не равен null).

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

Пример

См. также

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

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

Spec-Zone.ru

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