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

std::wcsrtombs

Материал из cppreference.com
< cpp‎ | string‎ | multibyte

Определено в заголовочном файле <cwchar>
std::size_t wcsrtombs( char* dst,

                       const wchar_t** src,
                       std::size_t len,

                       std::mbstate_t* ps );
Преобразует последовательность широких символов из массива, чей первый элемент, на который указывает *src его узкое представление многобайтовую, который начинается в преобразовании состояние, описываемое *ps. Если dst не является нулевым, преобразованные символы хранятся в последовательных элементов массива символов, на которую указывает dst. Не более len байты записываются в массив назначения.
Оригинал:
Converts a sequence of wide characters from the array whose first element is pointed to by *src to its narrow multibyte representation that begins in the conversion state described by *ps. If dst is not null, converted characters are stored in the successive elements of the char array pointed to by dst. No more than len bytes are written to the destination array.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Каждый персонаж превращается как бы призыв к std::wcrtomb. Преобразование прекращается, если:
Оригинал:
Each character is converted as if by a call to std::wcrtomb. The conversion stops if:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Нулевой символ был преобразован и сохранен. src установлен в NULL и *ps представляет начальное состояние сдвига.
    Оригинал:
    The null character was converted and stored. src is set to NULL and *ps represents the initial shift state.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • wchar_t было установлено, что не соответствует допустимым символом в текущей локали C. src установлен, чтобы указать на первый необращенных широкий характер.
    Оригинал:
    A wchar_t was found that does not correspond to a valid character in the current C locale. src is set to point at the first unconverted wide character.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Следующий символ многобайтовых будут храниться будет превышать len. src установлен, чтобы указать на первый необращенных широкий характер. Это условие не проверяется, если dst==NULL.
    Оригинал:
    the next multibyte character to be stored would exceed len. src is set to point at the first unconverted wide character. This condition is not checked if dst==NULL.
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

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

dst -
Указатель на узкой массив символов, где многобайтовые символы будут сохранены
Оригинал:
pointer to narrow character array where the multibyte characters will be stored
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
src -
Указатель на указатель на первый элемент нулем строку широких
Оригинал:
pointer to pointer to the first element of a null-terminated wide string
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
len -
количество байт, доступных в массиве, на который указывает DST
Оригинал:
number of bytes available in the array pointed to by dst
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ps -
указатель на объект, состояние преобразования
Оригинал:
pointer to the conversion state object
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

В случае успеха возвращает количество байтов (включая любые изменения последовательностей, но исключая завершающий '\0') записывается в массив символов, первый элемент, на который указывает dst. Если dst==NULL, возвращает количество байт, которые были бы написаны.
Оригинал:
On success, returns the number of bytes (including any shift sequences, but excluding the terminating '\0') written to the character array whose first element is pointed to by dst. If dst==NULL, returns the number of bytes that would have been written.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
На ошибки преобразования (если недействительных широкий символ встречается), возвращается static_cast<std::size_t>(-1), магазины EILSEQ в errno, и оставляет *ps в неопределенное состояние.
Оригинал:
On conversion error (if invalid wide character was encountered), returns static_cast<std::size_t>(-1), stores EILSEQ in errno, and leaves *ps in unspecified state.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

#include <iostream>
#include <vector>
#include <clocale>
#include <string>
#include <cwchar>
 
void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    int len = 1 + std::wcsrtombs(NULL, &wstr, 0, &state);
    std::vector<char> mbstr(len);
    std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
    std::cout << "multibyte string: " << &mbstr[0] << '\n'
              << "Length, including '\\0': " << mbstr.size() << '\n';
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    print_wide(wstr);
}

Вывод:

multibyte string: zß水𝄋
Length, including '\0': 11

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

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

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

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

(virtual protected std::codecvt функция-член) [edit]
C documentation for wcsrtombs