std::mbstowcs
Определено в заголовочном файле <cstdlib>
|
||
std::size_t mbstowcs( wchar_t* dst, const char* src, std::size_t len); |
||
Преобразует многобайтовую строку символов из массива, на первый элемент которого указывает src, в её широкое символьное представление. Преобразованные символы сохраняются в последовательных элементах массива, на который указывает dst. В целевой массив записывается не более len широких символов.
Каждый символ преобразуется так же, как при вызове std::mbtowc, за исключением того, что состояние преобразования mbtowc не изменяется. Преобразование останавливается, если:
- Многобайтовый нулевой символ был преобразован и сохранён.
- Обнаружен недопустимый (в текущей локали C) многобайтовый символ.
- Следующий широкий символ, который нужно сохранить, превысит len.
Содержание |
[править] Примечание
В большинстве реализаций эта функция обновляет глобальный статический объект типа std::mbstate_t по мере обработки строки и не может быть вызвана одновременно двумя потоками, std::mbsrtowcs должна использоваться в таких случаях.
POSIX определяет общее расширение: если dst является нулевым указателем, эта функция возвращает количество широких символов, которые будут записаны в dst при преобразовании. Аналогичное поведение является стандартным для std::mbsrtowcs.
[править] Параметры
dst | — | указатель на массив широких символов, где будет храниться широкая строка |
src | — | указатель на первый элемент многобайтовой строки с завершающим нулём для преобразования |
len | — | количество широких символов, доступных в массиве, на который указывает dst |
[править] Возвращаемое значение
В случае успеха возвращает количество широких символов, за исключением завершающего L'\0', записанных в целевой массив.
При ошибке преобразования (если обнаружен недопустимый многобайтовый символ) возвращает static_cast<std::size_t> (-1).
[править] Пример
#include <iostream> #include <clocale> #include <cstdlib> int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::wcout.imbue(std::locale("en_US.utf8")); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // или u8"zß水🍌" // или "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t wstr[5]; std::mbstowcs(wstr, mbstr, 5); std::wcout << "широкая строка: " << wstr << '\n'; }
Вывод:
широкая строка: zß水🍌
[править] Смотрите также
преобразует узкую многобайтовую строку символов в широкую строку при заданном состоянии (функция) | |
преобразует широкую строку в узкую многобайтовую строку символов (функция) | |
[virtual] |
преобразует строку из externT в internT, например, при чтении из файла Оригинал: converts a string from externT to internT, such as when reading from file Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
Документация C по mbstowcs
|