#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

void output(const u16string &s)
{
    cout << "length: " << s.length() << endl;	

    cout << "code units: ";
    for (auto ch : s)
        cout << hex << setw(4) << setfill('0') << (int)ch << ' ';
    cout << endl;	

    cout << "bytes: ";
    const unsigned char *ptr = reinterpret_cast<const unsigned char*>(s.data());
    for (size_t i = 0; i < s.length() * sizeof(char16_t); ++i)
        cout << hex << setw(2) << setfill('0') << (int)ptr[i] << ' ';
    cout << endl;	
}

int main() {
    output(u16string{u"万不得已"});
    cout << endl;
    output(u16string{u"\007\116\015\116\227\137\362\135"});
    return 0;
}