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 не является нулевым указателем).

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

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

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

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

Параметры

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 не определено.

Пример

См. также

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

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

Spec-Zone.ru

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