Spec-Zone.ru › C++

std::mbrtoc8

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

Если кодировка 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, если он не равен null), был нулевым символом.
  • количество байтов [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 не определено.

Пример

См. также

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

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

Spec-Zone.ru

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