2009-12-01 58 views
1
C#: 
char z = '\u201D'; 
int i = (int)z; 

C++/CLI: 
wchar_t z = '\u201D'; 
int i = (int)z; 

在C#中,「i」與我預期的一樣,爲8221($ 201D)。另一方面,在C++/CLI中,它變成了65428($ FF94)。某種靈魂可以向我解釋這個嗎?C#與C++/CLI中的Unicode字符串文字

編輯:的wchar_t大小不能問題在這裏,因爲:

C++/CLI: 
wchar_t z = (wchar_t)8221; 
int i = (int)z; 

這裏也i變爲8221,所以wchar_t確實達持有的16位整數的遊戲我的系統。 Ekeforshus

+0

你的第二個例子並沒有證明大小不是問題 - >在第一個例子中的第二個例子中,z是否爲z? – 2009-12-01 14:28:00

回答

4

你想:

wchar_t z = L'\x201D'; 
here

。 \ u是未定義的。

+1

...應該給你一個/ W1警告「無法識別的字符轉義序列」。 – MSalters 2009-12-02 11:30:27

0

根據wikipedia

「的wchar_t寬度是編譯器特定的,並且可以是作爲8位。因此,需要被跨越任何C或C可移植的程序的小++編譯器不應該使用wchar_t用於存儲Unicode文本wchar_t類型用於存儲編譯器定義的寬字符,在某些編譯器中可能是Unicode字符。「

你不應該對它的實現做任何假設。