Spec-Zone.ru › C++

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ß水🍌

См. также

mbsrtowcs
преобразует строку символов многобайтовой кодировки в строку широкой кодировки, учитывая состояние
(функция)
wcstombs
преобразует строку широкой кодировки в строку символов многобайтовой кодировки
(функция)
do_in
[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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API