关于C++中宽字节的一些描述

关于C++中宽字节的一些描述

概述

      宽字符是双字节多语言字符代码。在当今的全球计算业内使用的大多数字符(包括技术符号和特殊的发布字符),都可以根据Unicode规范表示为宽字符形式。无法以1个宽字符表示的字符可以通过Unicode的代理项功能以Unicode对表示。由于每个宽字符总是以固定的16位大小表示,因此使用宽字符可以简化使用国际字符集进行的编程。   

      宽字符字符串表示为一个 wchar_t[] 数组并由   wchar_t*   指针指向它。可以通过用字母 L 作为字符的前缀将任何 ASCII 字符表示为宽字符形式。例如,L'/0'   是终止宽(16   位)NULL字符。同样,可以通过用字母 L 作为 ASCII 字符串的前缀 (L"Hello") 将任何 ASCII 字符串表示为宽字符字符串形式。   

      通常,宽字符在内存中占用的空间比多字节字符多,但处理速度更快。另外,在多字节编码中一次只能表示一个区域设置,而世界上的所有字符集都同时以Unicode表示形式表示。

宽字符定义的一些说明:

      1> Unicode或者宽字符都没有改变char数据类型在C中的定义。

      2> C中的宽字符基于 wchar_t 数据类型,它在几个头文件包括WCHAR.H中都有定义,如下:

typedef unsigned short wchar_t;

  因此,wchar_t数据类型与无符号短整数型相同,都是16位宽。

      3> 要定义包含一个宽字符的变量,可使用下面的语句:

wchar_t c = 'A';

  变量c是一个双字节值0x0041,是Unicode表示的字母A。(然而,因为Intel微处理器从最小的字节开始储存多字节数值,该字节实际上    是以0x41、0x00的顺序保存在记忆体中。如果检查Unicode文字的电脑储存应注意这一点。)

     4> 可定义指向宽字串的指针:

   wchar_t * p = L"Hello!";   

      注意:第一个引号前面的大写字母L(代表「long」),这将告诉编译器该字串按宽字符保存——即每个字符占用2个字节。通     常,指针变量p要占用4个字节,而字串 变量需要14个字节-每个字符需要2个字节,末尾的/0还需要2个字节。

      5> 可以用下面的语句定义宽字符数组:   

   static wchar_t a[] = L"Hello!"   ;   

      该字串也需要14个字节的储存空间,sizeof(a)将返回14。索引数组a可得到单独的字符。a[1]的值是宽字符「e」,或者0x0065。第    一个引号和L两个符号之间必须没有空格。L 使编译器将字串存为每个字符2字节。

      6> 可在单个字符文字前面使用L字首,来表示它们应解释为宽字符。如下所示:

   wchar_t c = L'A';   

      但通常这是不必要的,C编译器会对该字符进行扩充,使它成为宽字符。

宽字符程序库函数

      strlen函数的宽字符版是wcslen(wide-character   string   length:宽字串长度),并且在STRING.H(其中也说明了strlen)和WCHAR.H中均有说明。strlen函数说明如下:   

   size_t   __cdecl   strlen   (const   char   *)   ;   

      而wcslen函数则说明如下:   

   size_t   __cdecl   wcslen   (const   wchar_t   *)   ;   

      要得到宽字串的长度可以调用 

   wchar_t   *   pw   =   L"Hello!"   ;     

   iLength   =   wcslen   (pw)   ;   

函数将返回字串中的字符数6。改成宽字节后,字串的字符长度不改变,只是字节长度改变了。所有带有字串参数的C执行时期程序库函数都有宽字符版。例如,wprintf是printf的宽字符版。这些函数在WCHAR.H和含有标准函数说明的头文件中说明。

 

以上内容摘自互联网,只供学习参考用。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值