1. 窄字符和宽字符
窄字符char:8bit表示的byte,长度固定。char字符只能表示ASII码表中的256个字符,包括前128个可见字符和
后面的128个不可见字符。
宽字符wchar_t:长度不固定。因为char所能表示的字符数太少(256个)而应运而生的,它的长度可以8bit,
16bit,32bit,长度是与不同平台上的c库相关的。其实这个长度是根据指定平台上想要用的encoding编码方式来设定
的。wchar_t就是存储的字符的unicode码值的编码值,但是也可以存储其它编码。
C/C++标准只是声明wchar_t是一个可以表示字符集中的任意一个字符的足够宽的变量类型。wchar_t可以用任何
encoding编码方式来存储这个字符,如ANSI, or UCS-2, or UCS- 4, 甚至是SCU-128,只不过我们通常是用unicode编
码方式。wchar_t是与实现相关的。为了可移植性,我们不能假定wchar_t的编码方式,然后根据编码方式做一些相关性操作,我们只能理解
它为一个足够宽的字符类型。
注意,char和wchar_t都是C/C++内置类型。
解释:关于L:
解释:ANSI编码
示例:
wchar_t w1= L'中'; //Unicode 编码
wchar_t w2= '中'; //Ansi编码
printf( "%0x %0x ",w1,w2); // 值4e2d d6d0
同样是赋值给wchar_t,但是不同的编码则值是不同的。同时也说明了wchar_t不光是可以存储Unicode宽字符,
也可以存储其它的编码。但是要注意,如果是存储的Ansi编码,则不能按照宽字符的格式输出。
char c = ‘A’ //0x41
wchar_t = 'A' //0x0041
从上例可以看出wchar_t是如何存储ansi编码的,如果按照宽字符解释,将按照宽字符表[如Unicode]中0x0041解释,出
现错误
注意:Inter微处理器中存储多字节时最低有效字节优先,所以这些字节在内存中的的实际存储顺序是: 0x41 0x00
建议:只是用wchar_t存储Unicode宽字符,不要使用类似 wchar_t c = 'a'; 改为用wchar_t c = L'a';
未完待续
参考:http://blog.csdn.net/nodeathphoenix/article/details/7416725