mbrtoc8
Определено в заголовке <uchar.h> |
||
|---|---|---|
size_t mbrtoc8( char8_t * restrict pc8, const char * restrict s,
size_t n, mbstate_t * restrict ps );
|
(с C23) |
Преобразует узкий многобайтовый символ в кодировку UTF-8.
Если s не является нулевым указателем, проверяет не более n байтов строки многобайтового символа, начиная с байта, на который указывает s, чтобы определить количество байтов, необходимое для завершения следующего многобайтового символа (включая любые последовательности смены кода). Если функция определяет, что следующий многобайтовый символ в s завершён и корректен, преобразует его в UTF-8 и сохраняет первый код UTF-8 в *pc8 (если pc8 не равен null).
Если кодировка многобайтового символа в *s состоит из более чем одного кода UTF-8, то после первого вызова этой функции *ps обновляется таким образом, что следующий вызов mbrtoc8 выведет дополнительные коды UTF-8, не учитывая *s.
Если s является нулевым указателем, значения n и pc8 игнорируются, и вызов эквивалентен mbrtoc8(nullptr, "", 1, ps).
Если код UTF-8, который был получен, — это u8'\0', состояние преобразования *ps представляет начальное состояние смены кода.
Многобайтовая кодировка, используемая этой функцией, определяется текущим активным C-локаль.
Параметры
| pc8 | - | указатель на место, куда будут записаны результирующие коды UTF-8 |
| s | - | указатель на строку многобайтового символа, используемую в качестве входных данных |
| n | - | ограничение на количество байтов в s, которое может быть просмотрено |
| ps | - | указатель на объект состояния преобразования, используемый при интерпретации многобайтовой строки |
Значение возврата
Первое из следующего, что применимо:
-
0если символ, преобразованный изs(и сохранённый в*pc8, если он не нулевой) был нулевым символом - количество байтов
[1...n]успешно преобразованного многобайтового символа изs -
(size_t)-3если следующий код UTF-8 из символа, кодировка которого состоит из нескольких кодов, был записан в*pc8. В этом случае байты не обрабатываются из входных данных. -
(size_t)-2если следующиеnбайта представляют собой незавершенный, но до этого момента действительный, многобайтовый символ. Ничего не записывается в*pc8. -
(size_t)-1если произошла ошибка кодирования. Ничего не записывается в*pc8, значениеEILSEQсохраняется вerrno, а значение*psне определено.
Пример
См. также
|
(C23) |
преобразует строку UTF-8 в узкую многобайтовую кодировку (функция) |
Документация C++ для mbrtoc8 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/multibyte/mbrtoc8