Cのワイドキャラと.NETでちょっと違う。ロカールかカルチャ問題か。スルー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include "stdafx.h" #include <ctype.h> #include <stdio.h> #include <limits.h> using namespace System; array<unsigned char>^ getByte(System::Char sc) { return System::Text::Encoding::Unicode->GetBytes(gcnew array<wchar_t>{sc}); } int main() { for (char c = 0; c < CHAR_MAX; ++c) { if (isspace(c)) { printf("0x%02x\n", c); } } Console::WriteLine("==============================="); for (wchar_t wc = 0; wc < 0xffff; ++wc) { if (iswspace(wc)) { wprintf(L"0x%04x\n", wc); } } Console::WriteLine("==============================="); for (System::Char sc = 0; sc < System::Char::MaxValue; ++sc) { if (System::Char::IsWhiteSpace(sc)) { array<unsigned char>^ ab = getByte(sc); Byte b1 = ab[0]; Byte b2 = ab[1]; String^ s = "0x" + b2.ToString("X2") + b1.ToString("X2"); Console::WriteLine(s); } } Console::WriteLine(L"Hello World"); return 0; } |
出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
0x09 0x0a 0x0b 0x0c 0x0d 0x20 =============================== 0x0009 0x000a 0x000b 0x000c 0x000d 0x0020 0x00a0 0x1680 0x180e 0x2000 0x2001 0x2002 0x2003 0x2004 0x2005 0x2006 0x2007 0x2008 0x2009 0x200a 0x2028 0x2029 0x202f 0x205f 0x3000 =============================== 0x0009 0x000A 0x000B 0x000C 0x000D 0x0020 0x0085 0x00A0 0x1680 0x2000 0x2001 0x2002 0x2003 0x2004 0x2005 0x2006 0x2007 0x2008 0x2009 0x200A 0x2028 0x2029 0x202F 0x205F 0x3000 Hello World 続行するには何かキーを押してください . . . |
.NETのバイト出力がすごく面倒くさい。エンディアン問題もある。