网站大量收购独家精品文档,联系QQ:2885784924

字符、字符串、常用类型转换简介.doc

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
字符、字符串、常用类型转换简介.doc

字符、字符串、常用类型转换简介 1????????? 简介 在开发过程中,我们常常会遇到ASCII、Unicode以及MBCS等不同类型的字符串,而且还需要经常进行转换操作。本文先介绍字符的编码方式、各种基本字符串类型,然后说明相关的帮助类,如CComBSTR、_bstr_t、CString和basic_string等,最后讨论在它们之间以及和其他的数据类型的转换方法。 2 ANSI、MBCS与UNICODE ASCII码(American Standard Code for Information Interchange)由一个字节中的7位(bit)表示,第8位没有被使用,范围是0x00 - 0x7F 共128个字符。其中32--127表示字符,32 是空格,32 以下是控制字符(不可见)。 后来扩展了ASCII的定义,ANSI(American National Standards Institute)使用的是一个字节的全部8位(bit)来表示字符,也就具有了 256个字符元;新扩展出来的字符主要是控制字符。ANSI字符集最大一个特点是向下兼容ASCII,并且留有空余位置处理一些特殊字符。 后来,很多语系(尤其是非拉丁语,比如日文、韩文、阿拉伯文、台湾繁体)都使用类似的方法扩展了本地字符集的定义,现在统一称为 MBCS 字符集(多字节字符集)。这种系统中,有些字符占用 1 字节,有些 2 字节。这个方法是有缺陷的,因为各个国家地区定义的字符集有交集,因此如果使用简体中文GB-2312的软件,就不能在台湾繁体BIG-5的环境下运行(显示乱码),反之亦然。 当然,提到MBCS,就不得不提一下Code Page,即代码页。字符必须编码后才能被计算机处理,那么计算机使用的编码方式就叫做Code Page。比如适用于简体中文的GB2312和用于繁体中文的big5。 为了把全世界人民所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集(宽字符集)。UNICODE 使用2个字节表示一个字符(unsigned short int、WCHAR、_wchar_t、OLECHAR),它的范围是0x0000 - 0xFFFF 共6万多个字符。这样,它把在这个星球上的每一个合理的文字系统整合成了一个单一的字符集,全世界任何一个地区的软件,可以不用修改地就能在另一个地区运行了。 在标准C++中,可以这样定义一个MBCS或者ANSI的字符串,即: char* pc = zhs; char c = z; 定义一个UNICODE的字符串,可以用L前缀,即: wchar_t* pww = Lzhs; wchar_t ww = Lz; 总结一下: ASCII长度为7位,共有128个字符,我们常用的英文字母和符号都包含在这里边。 ANSI长度为8位,共有256个字符。前128个字符也为ASCII。ASCII和ANSI只是在一些控制符号上有区别。 MBCS长度为1或2个字节,不确定。 UNICODE长16位,即2个字节,被C/C++定义成wchar_t。 3、UNICODE的编码方式 很多人还存在这样的误解: Unicode 仅仅是每个字符占 2个字节,所以一共有 65536 个可能的字符。然而,这是错误的。 最初的Unicode编码, 使用两个字节表示一个字符,包括表示字符串结束符的‘0’也是两个字节,这种编码方式叫做UTF-16。那么 Hello 表示为: 00 48 00 65 00 6C 00 6C 00 6F 00 00 实际上,还有一种表示方式: 48 00 65 00 6C 00 6C 00 6F 00 00 00 到底高位字节在前还是低位字节在前面,是两种不同的模式。这要看特定的 CPU 在何种模式下工作的更快。 所以这两种都有。详细请参考:以下是Big-Endian 和 Little-Endian 两者概念的区别。 理论上这种解决方案很不错。但是对于英语用户来说,他们很少使用 00FF 以上的字符, 有些人无法忍受采用双倍的存储空间来存储每个字符而造成的浪费。基于这些原因,很多人决定忽视 Unicode;而另外的人想出了别的方案。 然后人们制定了 UTF-8, UTF-8 是用于保存 Unicode的另一套编码方案。在 UTF-8 中,任何一个 0--127 的字符占用一个字节。只有 128 以及更大的才占用 2, 3, 直到 6 个字节。 用UTF-8编码的字符串,其结束符是一个字节的0;而不是UTF-16的两个字节的0。换句话说,UTF-8编码的字符串,会向下兼容标准C的函数。 实际上,还有一种Unicode编码形式, 使用四个字节表示字符串中的任意一个字符,这种编码方式叫做UTF-32,或者UCS-4。 默认情况,Windo

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档