首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

wchar_t加'L与不加'L'为何不同?解决方案

2012-04-08 
wchar_t加L与不加L为何不同?#includeiostreamusingnamespacestdvoidmain(){wchar_tw1L 哀 wchar_t

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编码
输出的时候对应的内码,自然不一样了/。

热点排行