#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
using namespace std;
template <typename O, typename S>
void write_hex(O &out, const S &s) {
for (auto x : s) {
out << std::hex << static_cast<uint16_t>(x) << " ";
}
out << endl;
}
int main()
{
wstring_convert<codecvt_utf8<char16_t>, char16_t> cvu16;
wstring_convert<codecvt_utf8<wchar_t>> cvu32;
cout << "string:" << endl;
string str = u8"abecą";
cout << str << endl;
write_hex(cout, str);
cout << endl;
cout << "u16string:" << endl;
u16string str_u16 = u"abecą";
cout << cvu16.to_bytes(str_u16) << endl;
write_hex(cout, str_u16);
cout << endl;
cout << "wstring:" << endl;
wstring str2 = L"abecą";
wcout << str2 << endl;
cout << cvu32.to_bytes(str2) << endl;
write_hex(cout, str2);
cout << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bG9jYWxlPgojaW5jbHVkZSA8Y29kZWN2dD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBPLCB0eXBlbmFtZSBTPgp2b2lkIHdyaXRlX2hleChPICZvdXQsIGNvbnN0IFMgJnMpIHsKCWZvciAoYXV0byB4IDogcykgewogICAgCW91dCA8PCBzdGQ6OmhleCA8PCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oeCkgPDwgIiAiOwogICAgfQogICAgb3V0IDw8IGVuZGw7Cn0KCgppbnQgbWFpbigpCnsKCXdzdHJpbmdfY29udmVydDxjb2RlY3Z0X3V0Zjg8Y2hhcjE2X3Q+LCBjaGFyMTZfdD4gY3Z1MTY7Cgl3c3RyaW5nX2NvbnZlcnQ8Y29kZWN2dF91dGY4PHdjaGFyX3Q+PiBjdnUzMjsKCQoJY291dCA8PCAic3RyaW5nOiIgPDwgZW5kbDsgCiAgICBzdHJpbmcgc3RyID0gdTgiYWJlY8SFIjsKICAgIGNvdXQgPDwgc3RyIDw8IGVuZGw7CiAgICB3cml0ZV9oZXgoY291dCwgc3RyKTsKICAgIGNvdXQgPDwgZW5kbDsKCQoJY291dCA8PCAidTE2c3RyaW5nOiIgPDwgZW5kbDsgCgl1MTZzdHJpbmcgc3RyX3UxNiA9IHUiYWJlY8SFIjsKCWNvdXQgPDwgY3Z1MTYudG9fYnl0ZXMoc3RyX3UxNikgPDwgZW5kbDsKICAJd3JpdGVfaGV4KGNvdXQsIHN0cl91MTYpOwogIAljb3V0IDw8IGVuZGw7CiAgCQogIAljb3V0IDw8ICJ3c3RyaW5nOiIgPDwgZW5kbDsgCgl3c3RyaW5nIHN0cjIgPSBMImFiZWPEhSI7Cgl3Y291dCA8PCBzdHIyIDw8IGVuZGw7Cgljb3V0IDw8IGN2dTMyLnRvX2J5dGVzKHN0cjIpIDw8IGVuZGw7Cgl3cml0ZV9oZXgoY291dCwgc3RyMik7Cgljb3V0IDw8IGVuZGw7Cn0=