字符串碎写

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.youkuaiyun.com/nodeathphoenix/article/details/7416725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值