unicode 字符串(宽字符串)如何在 Windows 中编码? UTF-16LE 还是 UTF-16BE?

How unicode string(wide string) are encode in Windows? UTF-16LE or UTF-16BE?

MSDN "Support for Unicode" :

A wide character is a 2-byte multilingual character code. Tens of thousands of characters, comprising almost all characters used in modern computing worldwide, including technical symbols and special publishing characters, can be represented according to the Unicode specification as a single wide character encoded by using UTF-16. Characters that cannot be represented in just one wide character can be represented in a Unicode pair by using the Unicode surrogate pair feature. Because almost every character in common use is represented in UTF-16 in a single 16-bit wide character, using wide characters simplifies programming with international character sets. Wide characters encoded using UTF-16LE (for little-endian) are the native character format for Windows.

但是,用/utf-8编译:

int wmain(int argc, wchar_t * argv[])
{
    wchar_t * wstr = L"ä ∫";
    for(int i=0; i < wcslen(wstr); i++) std::cout << std::hex << wstr[i] << " | ";
    std::cout << std::endl;
    for(int i=0; i < wcslen(wstr); i++) std::cout << std::bitset<8>(wstr[i] >> 8) << " " << std::bitset<8>(wstr[i]) << " | ";
    return 0;
}

Return:

e4 | 20 | 222b |
00000000 11100100 | 00000000 00100000 | 00100010 00101011 |

其中 ä 编码为 00000000 11100100 - 它是 utf-16BE。
其中 编码为 00100010 00101011 - 它是 utf-16BE.

我哪里错了?我错过了什么?

此答案是@IInspectable 对问题 post 的第一个评论的副本:

"Where I am wrong?" - Precisely where you assume that cout's output would reflect the internal representation. It doesn't. If you want to output bytes in the order they are stored in memory, cast to char const* and output the individual bytes.