# std::wctob

From cppreference.com
< cpp‎ | string‎ | multibyte

Defined in header `<cwchar>` |  |
int wctob( std::wint_t c ); |  |

Narrows a wide character `c` if its multibyte character equivalent in the initial shift state is a single byte.

This is typically possible for the characters from the ASCII character set, since most multibyte encodings (such as UTF-8) use single bytes to encode those characters.

### Parameters

c | - | wide character to narrow

### Return value

EOF if `c` does not represent a multibyte character with length 1 in initial shift state.

Otherwise, the single-byte representation of `c` as unsigned char converted to int

### Example

Run this code

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

    void try_narrowing(wchar_t c)
    {
        int cn = std::wctob(c);
        if(cn != EOF)
            std::cout << '\'' << c << "' narrowed to " << +cn << '\n';
        else
            std::cout << '\'' << c << "' could not be narrowed\n";
    }

    int main()
    {
        std::setlocale(LC_ALL, "th_TH.utf8");
        std::cout << std::hex << std::showbase << "In Thai UTF-8 locale:\n";
        try_narrowing(L'a');
        try_narrowing(L'๛');

        std::setlocale(LC_ALL, "th_TH.tis620");
        std::cout << "In Thai TIS-620 locale:\n";
        try_narrowing(L'a');
        try_narrowing(L'๛');
    }

Output:

    In Thai UTF-8 locale:
    '0x61' narrowed to 0x61
    '0xe5b' could not be narrowed
    In Thai TIS-620 locale:
    '0x61' narrowed to 0x61
    '0xe5b' narrowed to 0xfb

### See also

btowc | widens a single-byte narrow character to wide character, if possible (function)
narrow | narrows characters (public member function of `std::basic_ios<CharT,Traits>`)
narrow | invokes `do_narrow` (public member function of `std::ctype<CharT>`)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/string/multibyte/wctob&oldid=96014"