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

std::wctomb

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

Определено в заголовочном файле <cstdlib>
int wctomb( char *s, wchar_t wc );
Преобразует широкий символ wc в многобайтовые кодирования и сохраняет его (в том числе любые изменения последовательности) в массив символов, первый элемент, на который указывает s. Не более MB_CUR_MAX символы хранятся.
Оригинал:
Converts a wide character wc to multibyte encoding and stores it (including any shift sequences) in the char array whose first element is pointed to by s. No more than MB_CUR_MAX characters are stored.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если wc является нулевой символ, нулевой байт записывается в s, которому предшествует любой сдвиг последовательности, необходимые для восстановления исходного состояния сдвига.
Оригинал:
If wc is the null character, the null byte is written to s, preceded by any shift sequences necessary to restore the initial shift state.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если s является нулевым указателем, сбрасывает глобальное состояние преобразования и определяет, является ли сдвиг последовательности используются.
Оригинал:
If s is a null pointer, resets the global conversion state and determines whether shift sequences are used.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

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

s -
Указатель на массив символов для вывода
Оригинал:
pointer to the character array for output
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
wc -
широкий характер, чтобы преобразовать
Оригинал:
wide character to convert
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

Если s не является нулевым указателем, возвращает количество байтов, содержащихся в многобайтовую представление wc или -1 если wc не является правильным характером.
Оригинал:
If s is not a null pointer, returns the number of bytes that are contained in the multibyte representation of wc or -1 if wc is not a valid character.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если s является нулевым указателем, сбрасывает его внутреннее состояние преобразования представляют начальное состояние смену и возвращается 0, если текущая кодировка многобайтовых не зависящих от состояния (не используется сдвиг последовательности) или ненулевое значение, если текущая кодировка является многобайтовой зависящих от состояния (используется сдвиг последовательности).
Оригинал:
If s is a null pointer, resets its internal conversion state to represent the initial shift state and returns 0 if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Заметки

Каждый вызов wctomb обновления внутреннего состояния глобального преобразования (статический объект типа std::mbstate_t, известный только этой функции). Если кодировок используется сдвиг государства, эта функция не может использоваться повторно. В любом случае, несколько потоков не должно вызывать wctomb без синхронизации: std::wcrtomb может быть использован вместо.
Оригинал:
Each call to wctomb updates the internal global conversion state (a static object of type std::mbstate_t, only known to this function). If the multibyte encoding uses shift states, this function is not reentrant. In any case, multiple threads should not call wctomb without synchronization: std::wcrtomb may be used instead.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

#include <iostream>
#include <clocale>
#include <string>
#include <cstdlib>
 
void print_wide(const std::wstring& wstr)
{
    bool shifts = std::wctomb(NULL, 0); // reset the conversion state
    std::cout << "shift sequences " << (shifts ? "are" : "not" ) << " used\n";
    for (wchar_t wc : wstr) {
        std::string mb(MB_CUR_MAX, '\0');
        int ret = std::wctomb(&mb[0], wc);
        std::cout << "multibyte char " << mb << " is " << ret << " bytes\n";
    }
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    std::wstring wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    print_wide(wstr);
}

Вывод:

shift sequences not used
multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 𝄋 is 4 bytes

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

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

(функция) [edit]
преобразует широкий символ в своем многобайтовых представление, данное состояние
Оригинал:
converts a wide character to its multibyte representation, 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 wctomb