wchar_t加'L与不加'L'为何不同?
#include <iostream>
using namespace std;
void main()
{
wchar_t w1=L '哀 ';
wchar_t w2= '哀 ';
printf( "%0x %0x ",w1,w2);
}
为什么加 'L '与不加 'L '输出会不同?
[解决办法]
来自 < <WINDOWS核心编程> > :
字符串前面的大写字母L ,用于告诉编译器该字符串应该作为U n i c o d e 字符串来编译。当编译器将字符串置于程序的数据部分中时,它在每个字符之间分散插入零字节。
这种变更带来的问题是,现在只有当定义了_ U N I C O D E 时,程序才能成功地进行编译。我们需要另一个宏,以便有选择地在字符串的前面加上大写字母L 。
这项工作由_ T E X T 宏来完成,_ T E X T 宏也在T C h a r. h 文件中做了定义。
如果定义了_ U N I C O D E ,那么_ T E X T 定义为下面的形式:
#define _TEXT(x) L ## x
如果没有定义_ U N I C O D E ,_ T E X T 将定义为
#define _TEXT(x) x
使用该宏,可以改写上面这行代码,这样,无论是否定义了_ U N I C O D E 宏,它都能够正确地进行编译。如下所示:
TCHAR *szError=_TEXT( "Error ");
[解决办法]
wchar_t w1=L '哀 ';//这个是unicode编码
wchar_t w2= '哀 ';//这个是ascii编码
输出的时候对应的内码,自然不一样了/。