std::c8rtomb
Определён в заголовочном файле <cuchar> | ||
|---|---|---|
std::size_t c8rtomb( char* s, char8_t c8, std::mbstate_t* ps ); | (начиная с C++20) |
Преобразует одну кодовую точку из UTF-8 в представление узкого многобайтового символа.
Если s не является нулевым указателем и c8 является последней кодовой единицей в корректной кодировке UTF-8 кодовой точки, функция определяет количество байтов, необходимых для хранения представления многобайтового символа этой кодовой точки (включая любые последовательности переключения и с учётом текущего состояния многобайтового преобразования *ps), и сохраняет представление многобайтового символа в массиве символов, первый элемент которого указывает s, обновляя *ps при необходимости. Эта функция может записать не более MB_CUR_MAX байтов.
Если c8 не является последней кодовой единицей в представлении кодовой точки, функция не записывает данные в массив, на который указывает s, а обновляется только *ps.
Если s является нулевым указателем, вызов эквивалентен std::c8rtomb(buf, u8'\0', ps) для некоторого внутреннего буфера buf.
Если c8 является нулевым символом u8'\0', сохраняется нулевой байт, которому предшествует любая последовательность переключения, необходимая для восстановления исходного состояния переключения, а параметр состояния преобразования *ps обновляется для представления исходного состояния переключения.
Многобайтовая кодировка, используемая этой функцией, определяется текущей активной локалью C.
Параметры
| s | - | указатель на массив узких символов, в котором будет сохранён многобайтовый символ |
| c8 | - | кодовая единица UTF-8 для преобразования |
| ps | - | указатель на объект состояния преобразования, используемый при интерпретации многобайтовой строки |
Возвращаемое значение
Количество байтов, сохранённых в объекте-массиве (включая любые последовательности переключения). Оно может быть равно нулю, если c8 не является последней кодовой единицей в представлении кодовой точки UTF-8.
Если c8 недопустим (не является частью последовательности char8_t, соответствующей корректному многобайтовому символу), значение макроса EILSEQ сохраняется в errno, возвращается static_cast<std::size_t>(-1), а состояние преобразования не определено.
Примечания
Вызовы c8rtomb с нулевым указателем в качестве аргумента s могут привести к гонке данных с другими вызовами c8rtomb с нулевым указателем в качестве аргумента s.
Пример
См. также
|
(C++20) | преобразует узкий многобайтовый символ в кодировку UTF-8 (функция) |
|
(C++11) | преобразует символ UTF-16 в узкую многобайтовую кодировку (функция) |
Документация по C для c8rtomb |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/multibyte/c8rtomb