std::mbsrtowcs
| Определено в заголовочном файле <cwchar>
|
||
std::size_t mbsrtowcs( wchar_t* dst, const char** src, std::size_t len, std::mbstate_t* ps ); |
||
Преобразует многобайтовую последовательность символов с нулевым завершением, которая начинается в состоянии преобразования, описанном *ps, из массива, на первый элемент которого указывает *src, в её представление в расширенных символах. Если dst не равно нулю, преобразованные символы сохраняются в последовательных элементах массива wchar_t, на который указывает dst. В массив назначения записывается не более len широких символов.
Каждый многобайтовый символ преобразуется так же, как при вызове std::mbrtowc. Преобразование прекращается, если:
- Многобайтовый нулевой символ был преобразован и сохранён. Для
srcустановлен нулевой указатель, а*psпредставляет начальное состояние сдвига. - Обнаружен недопустимый многобайтовый символ (согласно текущей локали C).
srcустанавливается на начало первого непреобразованного многобайтового символа. - Следующий широкий символ, который нужно сохранить, будет превышать значение
len.srcустанавливается на начало первого непреобразованного многобайтового символа. Это условие не проверяется, еслиdstявляется нулевым указателем.
Параметры
| dst | — | указатель на массив широких символов, в котором будут храниться результаты |
| src | — | указатель на указатель на первый элемент многобайтовой строки с нулевым завершением |
| len | — | количество широких символов, доступных в массиве, на который указывает dst |
| ps | — | указатель на объект состояния преобразования |
Возвращаемое значение
В случае успеха возвращает количество широких символов, исключая завершающий L'\0', записанный в массив символов. Если dst это нулевой указатель, возвращает количество широких символов, которые были бы записаны при неограниченной длине.
При ошибке преобразования (если обнаружен недопустимый многобайтовый символ) возвращает static_cast<std::size_t>(-1), сохраняет EILSEQ в errno и оставляет *ps в неуказанном состоянии.
Примечание
Эта функция перемещает указатель src в конец преобразованной многобайтовой строки. Этого не происходит, если dst является нулевым указателем.
Пример
#include <clocale>
#include <cwchar>
#include <iostream>
#include <vector>
void print_as_wide(const char* mbstr)
{
std::mbstate_t state = std::mbstate_t();
std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state);
std::vector<wchar_t> wstr(len);
std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state);
std::wcout << L"Широкая строка: " << &wstr[0] << '\n'
<< L"Длина, включая '\\0': " << wstr.size() << '\n';
}
int main()
{
std::setlocale(LC_ALL, "en_US.utf8");
const char* mbstr = "z\u00df\u6c34\U0001f34c"; // или u8"zß水🍌"
print_as_wide(mbstr);
}
Вывод:
Широкая строка: zß水🍌
Длина, включая '\0': 5
Смотрите также
| преобразует следующий многобайтовый символ в широкий символ при заданном состоянии (функция) | |
| преобразует широкую строку в узкую многобайтовую строку символов при заданном состоянии (функция) | |
[virtual] |
преобразует строку из externT в internT, например, при чтении из файла Оригинал: converts a string from externT to internT, such as when reading from file Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
Документация C по mbsrtowcs
| |