c++字符串完全指引之一 —— win32 字符编码new

c++字符串完全指引之一 —— win32 字符编码new

ID:22618371

大小:88.50 KB

页数:11页

时间:2018-10-30

c++字符串完全指引之一 —— win32 字符编码new_第1页
c++字符串完全指引之一 —— win32 字符编码new_第2页
c++字符串完全指引之一 —— win32 字符编码new_第3页
c++字符串完全指引之一 —— win32 字符编码new_第4页
c++字符串完全指引之一 —— win32 字符编码new_第5页
资源描述:

《c++字符串完全指引之一 —— win32 字符编码new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C++字符串完全指引之一——Win32字符编码原著:MichaelDunn翻译:ChengjieSun原文出处:CodeProject:TheCompleteGuidetoC++Strings,PartI引言毫无疑问,我们都看到过像TCHAR,std::string,BSTR等各种各样的字符串类型,还有那些以_tcs开头的奇怪的宏。你也许正在盯着显示器发愁。本指引将总结引进各种字符类型的目的,展示一些简单的用法,并告诉您在必要时,如何实现各种字符串类型之间的转换。在第一部分,我们将介绍3种字符编码类型。

2、了解各种编码模式的工作方式是很重要的事情。即使你已经知道一个字符串是一个字符数组,你也应该阅读本部分。一旦你了解了这些,你将对各种字符串类型之间的关系有一个清楚地了解。在第二部分,我们将单独讲述string类,怎样使用它及实现他们相互之间的转换。字符基础--ASCII,DBCS,Unicode所有的string类都是以C-style字符串为基础的。C-style字符串是字符数组。所以我们先介绍字符类型。这里有3种编码模式对应3种字符类型。第一种编码类型是单子节字符集(single-bytecharact

3、ersetorSBCS)。在这种编码模式下,所有的字符都只用一个字节表示。ASCII是SBCS。一个字节表示的0用来标志SBCS字符串的结束。第二种编码模式是多字节字符集(multi-bytecharactersetorMBCS)。一个MBCS编码包含一些一个字节长的字符,而另一些字符大于一个字节的长度。用在Windows里的MBCS包含两种字符类型,单字节字符(single-bytecharacters)和双字节字符(double-bytecharacters)。由于Windows里使用的多字节字符绝

4、大部分是两个字节长,所以MBCS常被用DBCS代替。在DBCS编码模式中,一些特定的值被保留用来表明他们是双字节字符的一部分。例如,在Shift-JIS编码中(一个常用的日文编码模式),0x81-0x9f之间和0xe0-oxfc之间的值表示"这是一个双字节字符,下一个子节是这个字符的一部分。"这样的值被称作"leadingbytes",他们都大于0x7f。跟随在一个leadingbyte子节后面的字节被称作"trailbyte"。在DBCS中,trailbyte可以是任意非0值。像SBCS一样,DBCS

5、字符串的结束标志也是一个单字节表示的0。第三种编码模式是Unicode。Unicode是一种所有的字符都使用两个字节编码的编码模式。Unicode字符有时也被称作宽字符,因为它比单子节字符宽(使用了更多的存储空间)。注意,Unicode不能被看作MBCS。MBCS的独特之处在于它的字符使用不同长度的字节编码。Unicode字符串使用两个字节表示的0作为它的结束标志。单字节字符包含拉丁文字母表,accentedcharacters及ASCII标准和DOS操作系统定义的图形字符。双字节字符被用来表示东亚及中

6、东的语言。Unicode被用在COM及WindowsNT操作系统内部。你一定已经很熟悉单字节字符。当你使用char时,你处理的是单字节字符。双字节字符也用char类型来进行操作(这是我们将会看到的关于双子节字符的很多奇怪的地方之一)。Unicode字符用wchar_t来表示。Unicode字符和字符串常量用前缀L来表示。例如:wchar_twch=L''1'';//2bytes,0x0031wchar_twsz=L"Hello";//12bytes,6widecharacters字符在内存中是怎样存储的

7、单字节字符串:每个字符占一个字节按顺序依次存储,最后以单字节表示的0结束。例如。"Bob"的存贮形式如下:426F6200BobBOSUnicode的存储形式,L"Bob"42006F0062000000BobBOS使用两个字节表示的0来做结束标志。一眼看上去,DBCS字符串很像SBCS字符串,但是我们一会儿将看到DBCS字符串的微妙之处,它使得使用字符串操作函数和永字符指针遍历一个字符串时会产生预料之外的结果。字符串""("nihongo")在内存中的存储形式如下(LB和TB分别用来表示leading

8、byte和trailbyte)93FA967B8CEA00LBTBLBTBLBTBEOSEOS值得注意的是,"ni"的值不能被解释成WORD型值0xfa93,而应该看作两个值93和fa以这种顺序被作为"ni"的编码。使用字符串处理函数我们都已经见过C语言中的字符串函数,strcpy(),sprintf(),atoll()等。这些字符串只应该用来处理单字节字符字符串。标准库也提供了仅适用于Unicode类型字符串的函数,比如wcscpy(),

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。