C#与C ++ / CLI中的Unicode字符串文字

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)。 有些灵魂可以向我解释一下吗?

编辑wchar_t大小在这里不是问题,因为:

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

在这里, i变成8221,所以wchar_t确实取决于在我的系统上持有16位整数的游戏。 Ekeforshus

你要:

 wchar_t z = L'\x201D'; 

从这里 。 \ u未定义。

根据维基百科 :

wchar_t的宽度是特定于编译器的,可以小到8位。因此,需要可以在任何C或C ++编译器上移植的程序不应使用wchar_t来存储Unicode文本.wchar_t类型用于存储编译器 -定义了宽字符,在某些编译器中可能是Unicode字符。“

你不应该对它的实现方式做任何假设。