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 <clocale>
#include <cstdlib>
#include <iostream>
int main()
{
std::setlocale(LC_ALL, "en_US.utf8");
std::wcout.imbue(std::locale("en_US.utf8"));
const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
// or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
wchar_t wstr[5];
std::mbstowcs(wstr, mbstr, 5);
std::wcout << "wide string: " << wstr << '\n';
}Вывод:
wide string: zß水🍌
См. также
| преобразует строку символов многобайтовой кодировки в строку широкой кодировки, учитывая состояние (функция) |
|
| преобразует строку широкой кодировки в строку символов многобайтовой кодировки (функция) |
|
|
[virtual] | преобразует строку из ExternT в InternT, например, при чтении из файла (виртуальная защищенная функция-член std::codecvt<InternT,ExternT,StateT>) |
C документация для mbstowcs |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/multibyte/mbstowcs