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не определено.
Пример
См. также
|
(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