wcstombs()
Ganz nützlich, wenn man UTF-16 kodierte Zeichen im Terminal darstellen möchte:
$ cat -n main.cpp
1 #include <stdint.h>
2 #include <iostream>
3 #include <iomanip>
4 #include <cstdlib>
5 #include <vector>
6
7 int main( int argc, char** argv )
8 {
9 // Some blocks.
10 std::wstring blocks( L"\u2581\u2582\u2583\u2584\u2585" );
11
12 // Does not work.
13 //std::wcout << blocks << std::endl;
14
15 // It's UTF-16, convert to multibyte string.
16
17 // Prepare destination.
18 uint16_t bytes = ( blocks.length() * sizeof( wchar_t ) ) + 1;
19 std::vector<char> dest( bytes );
20
21 // Setting locale is required, otherwise wcstombs() does not work.
22 std::setlocale( LC_ALL, "C.UTF-8" );
23
24 // Convert.
25 uint16_t rc = std::wcstombs( &( dest[ 0 ] ), blocks.c_str(), bytes );
26 std::cout << "wcstombs() wrote " << rc << " bytes" << std::endl;
27
28 // Build string and print.
29 std::string result( &( dest[ 0 ] ) );
30 std::cout << "printing as multibyte string does the trick: ";
31 std::cout << result << std::endl;
32 }