C++字符串完全指南 第一部分:Win32字符编码.doc

C++字符串完全指南 第一部分:Win32字符编码.doc

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

C++字符串完全指南 第一部分:Win32字符编码 C++Win32字符编码 前言 毫无疑问,你见过多种不同的字符串类型,比如TCHAR,std::string,BSTR等等。另外还有一些以_tcs打头的宏也很让人很难理解。当你看见屏幕上的东西时,你禁不住想,哇,都是什么东西?本文将概述每一种字符串类型的特性;给出一些简单的示例并且概括如何在需要的时候将一种字符串类型转换成其它的类型。 ? 在第一部分,我将会讨论三种字符编码。这对于你理解编码的工作方式是很重要的。尽管你已经知道一个字符串是一系列字符的组合,这部分还是很重要的。当你了解了这一部分,你就会更加清楚不同字符串类型之间的联系。 ? 在第二部分中,我将会讨论字符串类本身,什么时候使用什么字符串并且如何在他们之间转换。 ? 字符基础知识 -ASCII,DBCS,Unicode 所有的字符串类型都归结为C风格的字符串。C风格的字符串是一系列字符的组合。所以我会首先讨论字符类型。通常有三种编码方案和三种字符类型。 ???第一种编码方案是单字节字符集(single-byte character set),或者叫SBCS。在这种编码方案中,所有的字符都是一个字节长。ASCII是SBCS的一个特例。一个字符0标志着一个SBCS字符串的结束。 ???第二种编码方案是多字节字符集(multi-byte character set),或者叫MBCS。 多字节编码方案包含了单字节的字符和多于一个字节的字符。在Windows系统中使用的多字节字符集有两种字符类型,单字节字符和双字节字符。因为Windows中使用的多字节字符集最大的字符是双字节的,所以我们通常用双字节字符集(double-byte character set),或者叫DBCS来代替MBCS。 在双字节编码方案中,某些值被保留起来说明他们是一个双字节字符的一部分。例如,在Shift-JIS编码方案中(通行的日语编码方案),位于0x81-0x9F和0xE0-0xFC之间的字符意味着:这是一个双字节字符,第二个字节是这个字符的一部分。这些值叫头字节(lead byte),它们的值通常大于0x7F。在头字节后面的字节叫尾字节(trail byte)。在双字节编码方案中,尾字节可以是任何一个非零值。就像在单字节编码方案中一样,双字节编码方案也是以字符0结束的。 ???第三种编码方案是Unicode。Unicode是一种所有字符都是两个字节长的编码方案。Unicode字符有时被叫做宽字符,因为它们比单字节字符更宽(占用更多存储空间)。要注意到Unicode不能被考虑成一种多字节字符编码方案。一个明显的特征是Unicode字符的长度和MBCS的长度不一样。Unicode字符串都是以两个字符0来结束的。 ???单字节字符是由拉丁字母,音节符号和一些在ASCII标准和DOS系统中定义的图形符号组成的。双字节字符用于东亚和中东语言。Unicode用于COM组件和Windows NT内部。 ???你肯定已经很熟悉单字节字符了。当你使用char数据类型的时候,你就在使用单字节字符。你也可以使用char来处理双字节字符(这也是你使用双字节字符所遇到的奇怪现象之一)。Unicode字符通常使用wchar_t类型。Unicode字符和字符串常量通常以字母L打头。例如: wchar_t?wch???=??L1????????????????//2字节长,0x0031 wchar_t*?wsz??=??LHello???????//12字节长,6个宽字符 ? 字符在内存中是如何存储的? 单字节字符在内存中都是一个接一个连续存储的,用一个0来结束字符串。例如,Bob是这样存储的 42 6F 62 00 B o b EOS 如果是Unicode版本,LBob是这样存储的 42 00 6F 00 62 00 00 00 B o b EOS 使用字符0x0000来结束这个字符串 ? 双字节字符第一眼看上去很象单字节字符串。但是我们随后会看到在使用函数操作字符串和使用指针偏历字符串的时候还是有所不同。字符串 (nihongo)是按照下面的方式存储的。(头字节和尾字节用LB和TB来表示) 93 FA 96 7B 8C EA 00 LB TB LB TB LB TB EOS 日 本 EOS 需要注意的是,“ni”并不等于0xFA93。两个值93和FA,以上面的顺序组合在一起,用来编码字符“ni”(在Big-Endian的CPU中,字节存储的方式就是象上图那样) ? 使用字符串处理函数 我们都见过象strcpy(),sprintf(),atol(),等等这些字符串函

文档评论(0)

gshshxx + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档