4

ノート:

/*
* Trivial code
*/
wchar_t *greeting = L"Hello World!";
char *greeting_ = "Hello World!";

WinDbg:

0:000> ?? greeting
wchar_t * 0x00415810
"Hello World!"
0:000> ?? greeting_
char * 0x00415800
"Hello World!"

0:000> db 0x00415800
00415800  48 65 6c 6c 6f 20 57 6f-72 6c 64 21 00 00 00 00  Hello World!....
00415810  48 00 65 00 6c 00 6c 00-6f 00 20 00 57 00 6f 00  H.e.l.l.o. .W.o.
00415820  72 00 6c 00 64 00 21 00-00 00 00 00 00 00 00 00  r.l.d.!.........

質問:

  • NULL文字の目的は何ですか: -Win3200のASCII文字のwchar_t間?
4

3 に答える 3

10

wchar_tはワイド文字の文字列であるため、各文字は2バイトのストレージを使用します。'H'a wchar_tは0x0048です。x86はリトルエンディアンであるため、メモリ内のバイトは4800の順序で表示されます。

windbgのdbはバイトをダンプし、ASCII文字列としてどのように表示されるかを提供します。したがって、表示されるHEL...出力です。'du'を使用して、メモリをUnicode文字列としてダンプできます。

于 2009-04-19T21:30:31.293 に答える
2

答えは、wchar_t文字は16ビット量であるため、それぞれ2バイトが必要であるということです。それぞれがUTF-16文字を表します。使用している文字はASCII範囲内にあるため、値は256未満であり、2バイトのペアごとに上位バイトはゼロになります。

于 2009-04-19T21:31:22.757 に答える
1

wchar_tはユニコード用で、charは標準の8ビットASCII用です。

wchar_tでは、すべての文字が16ビットで表されますが、「標準」文字はチャートの下半分にあります。たとえば、従来の中国語では、これらのバイトに00以外の値が使用されます。

于 2009-04-19T21:30:09.937 に答える