Пространства имён
Варианты
Действия

std::mbstowcs

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
Определено в заголовочном файле <cstdlib>
std::size_t mbstowcs( wchar_t* dst, const char* src, std::size_t len);

Преобразовывает строку из мультибайтовых символов в массив, чей первый элемент, на который указывает src, будет хранить эту строку из широких символов. Преобразованные символы сохраняются в последовательных элементах массива, на который указывает dst. Не больше чем len широких символов может быть записано в массив назначения.

Каждый символ конвертируется так, как если бы вызывалась функция std::mbtowc, только с той разницей, что состояние сдвига регистра mbtowc не изменяется. Процесс преобразования заканчивается, если:

  • Мультибайтовый нулевой символ был сконвертирован и сохранён
  • Некорректный (в текущей Си-локали) мультибайтовый символ встретился
  • Сохранение следующего широкого символа может превысить len.

Содержание

[править] Примечание

В большинстве реализаций эта функция обновляет глобальный статический объект, который имеет тип std::mbstate_t, в ходе обработки строки, и она не может быть вызвана одновременно из двух потоков, если это необходимо, то можно воспользоваться std::mbsrtowcs.

Специфичная для POSIX расширение: если dst - нулевой указатель, то эта функция возвращает количество широких символов, которое может быть записано в dst, если они будут сконвертированы. Подобное поведение характерно и для std::mbsrtowcs.

[править] Параметры

dst - Указатель на строку из широких символов, куда будет сохранена сконвертированная строка
src - Указатель на нульзавершённую строку из мультибайтовых символов для конвертирования
len - Количество доступных для сохранения широких символов для сохранения

[править] Возвращаемое значение

В случае успеха возвращается количество широких символов, исключая завершающий L'\0', которые были записаны в массив назначения.

Если процесс конвертирования был не удачен (встречен некорректный мультибайтовый символ), то возвращается -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 = u8"z\u00df\u6c34\U0001f34c"; // Или u8"zß水🍌"
                        // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << L"Строка из широких символов: " << wstr << '\n';
}

Вывод:

Строка из широких символов: zß水🍌

[править] См. также

преобразует узкой буквенная многобайтовых широкой строки, данное состояние
Оригинал:
converts a narrow multibyte character string to wide string, given state
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
Преобразует широкую строку в узкую многобайтовую строку из символов
(функция) [править]
[virtual]
преобразует строку из externT в internT, например, при чтении из файла
Оригинал:
converts a string from externT to internT, such as when reading from file
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(virtual protected std::codecvt функция-член) [править]
C documentation for mbstowcs