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 не равно нулю).
Если кодировка 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 по mbrtoc8
| |