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

std::wctob

Материал из cppreference.com
 
 
 
Многобайтовые строки с завершающим нулём
Широкие/многобайтовые преобразования
Типы
 
<tbody> </tbody>
Определено в заголовочном файле <cwchar>
int wctob( std::wint_t c );

Сужает широкий символ c, если эквивалентный многобайтовый символ в начальном состоянии сдвига составляет один байт.

Обычно это возможно для символов из набора символов ASCII, поскольку большинство многобайтовых кодировок (например, UTF-8) используют для кодирования этих символов одиночные байты.

Параметры

c широкий символ для сужения

Возвращаемое значение

EOF, если c не представляет многобайтовый символ длиной 1 в исходном состоянии сдвига.

Иначе однобайтовое представление c как unsigned char, преобразованный в int.

Пример

#include <clocale>
#include <cwchar>
#include <iostream>

void try_narrowing(wchar_t c)
{
    int cn = std::wctob(c);
    if (cn != EOF)
        std::cout << '\'' << int(c) << "' сузился до " << +cn << '\n';
    else
        std::cout << '\'' << int(c) << "' не удалось сузить\n";
}
 
int main()
{
    std::setlocale(LC_ALL, "th_TH.utf8");
    std::cout << std::hex << std::showbase << "В тайской локали UTF-8:\n";
    try_narrowing(L'a');
    try_narrowing(L'๛');

    std::setlocale(LC_ALL, "th_TH.tis620");
    std::cout << "В тайской локали TIS-620:\n";
    try_narrowing(L'a');
    try_narrowing(L'๛');
}

Вывод:

В тайской локали UTF-8:
'0x61' сузился до 0x61
'0xe5b' не удалось сузить
В тайской локали TIS-620:
'0x61' сузился до 0x61
'0xe5b' сузился до 0xfb

Смотрите также

расширяет однобайтовый узкий символ до широкого символа, если это возможно
(функция) [править]
конвертирует символ в символ меньшей ширины
(public функция-элемент std::basic_ios) [править]
Вызывает do_narrow
Оригинал:
invokes do_narrow
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(public функция-элемент std::ctype) [править]