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не определено.
Пример
См. также
|
(C++20) | преобразует строку UTF-8 в узкую многобайтовую кодировку (функция) |
|
(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