Spec-Zone.ru › C++

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 << "Wide string: " << &wstr[0] << '\n'
               << "The length, including '\\0': " << wstr.size() << '\n';
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌"
    print_as_wide(mbstr);
}

Вывод:

Wide string: zß水🍌
The length, including '\0': 5

См. также

mbrtowc
преобразует следующий многобайтовый символ в символ расширенной кодировки, учитывая состояние
(функция)
wcsrtombs
преобразует строку расширенной кодировки в строку многобайтовых символов, учитывая состояние
(функция)
do_in
[virtual]
преобразует строку из ExternT в InternT, например, при чтении из файла
(виртуальная защищённая функция-член std::codecvt<InternT,ExternT,StateT>)
C документация для mbsrtowcs

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcs

Spec-Zone.ru

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