vc字符串之间的转换

vc字符串之间的转换

ID:8970355

大小:67.10 KB

页数:30页

时间:2018-04-13

vc字符串之间的转换_第1页
vc字符串之间的转换_第2页
vc字符串之间的转换_第3页
vc字符串之间的转换_第4页
vc字符串之间的转换_第5页
资源描述:

《vc字符串之间的转换》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、字符串的转换字符串转换用到的地方很多,常见的字符串类型有以下几种:charwchartcharBSTR_bstr_tCComBSTRCStringstring。最常涉及到的是在BSTR和CString之间相互转换。1.字符串的根本及其封装其实最基本的字符或串,深究到底,只有三种:字符字符串说明charLPSTRLPCSTR单字节,以0标记结束wchar_tLPWSTRLPWCSTR双字节,以0标记结束 BSTR双字节,前面有4个byte长,用来装字节数。这表明一个BSTR串可能包含多个0而至于以下的封装,其目的多是对其中一种进行封装,并提供了转入和转出的接口。而封装的方

2、式分为两条线,unicode方式和com方式。Windows的兼容UNICODE封装字符字符串说明charLPSTRLPCSTRAnsi单字节wchar_tLPWSTRLPWCSTRUnicode双字节TCHARLPTSTRLPCTSTRCString兼容Ansi和unicode的 Windows的兼容com封装分支字符串说明通用标准BSTR多用在IDL中,作为标准接口对外兼容各类语言的使用者comc++_bstr_t多用在c++的实现和使用,既有MFC也有标准C++包含comdef.hOLEAUT32.LIBOLEAUT32.dllAtlCComBSTR多用在atl的

3、组件实现和使用方面,包含atlbase.hatl.libatl.dllunicode和com有很大的相同------都是双字节。MS将组件的通用字符串类型定义为双字节了。BSTR前进的第一步是双字节;前进的另一步是字符串长度的解决方法。以0结尾的通用的字符串解决方式简单明了;但是在那内存寸土寸金的年代,讲求速度、最大化发挥软件的功能和效率,为所有字符串都省去求长这一步,在最简单的地方前进一步,产生的收益却是无穷大。2. 字符串的转换转换与使用的场合相结合。总结如下场合 分支字符串说明MFCCStringMFC对兼容unicode的封装通用标准BSTRIDL中使用comc

4、++_bstr_t多用在使用组件时,非MFC程序也可以使用。_bstr_t实际上是将charwchar_tBSTR转换为wchar_t*;同时又可以转换为charwchar_tBSTR注意:里面的转换函数使用的是标准c++AtlCComBSTR多用在atl的组件实现和使用方面,CcomBSTR实际上是也是将非BSTR转换为BSTR的副本但不支持转换为其它非BSTR类型注意:里面的转换函数使用的是winapi说明:BSTR实际上可以直接作为wchat_t*来使用。3 BSTR简介COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C+

5、+字符串是以0结束的ASCII或Unicode字符数组VisualBasic字符串是一个ASCII字符数组加上表示长度的前缀。Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言。在C++中,就是BSTR。BSTR是"BasicSTRing"的简称,微软在COM/OLE中定义的标准字符串数据类型。对于C++,Windows头文件wtypes.h中定义如下:typedefwchar_tWCHAR;typedefWCHAROLECHAR;typedefOLECHAR__RPC_FAR*BSTR;在COM中,字符用16

6、-bitOLECHAR表示,这样使COM可以支持各种codepages,包括Unicode。对于windows系统,可以简单理解为OLECHAR使用的就是Unicode。OLECHAR串与单字节字符串很类似,是一个以null结尾的buffer。唯一的区别是每个字符占两个字节,而不是一个012345678901

7、H

8、E

9、L

10、L

11、O

12、/0

13、^OLCHAR使用以Null结尾的简单字符串在COMcomponent间传递不太方便。因此,标准BSTR是一个有长度前缀和null结束符的OLECHAR数组。BSTR的前4字节是一个表示字符串长度的前缀。BSTR长度域的值是字符串的字节数

14、,并且不包括0结束符。由于是Unicode串,所以字符数是字节数的一半。这种方式的优点是允许程序员在BSTR串中间嵌入NULL字符。但是,BSTR的前四个字节表示长度,而OLECHAR数组的前四字节表示前两个字符。这种情况下,对于C++程序,如何实现BSTR和OLECHAR的交换?答案是COM提供了两个BSTR分配用的API:SysAllocString/SysReallocString。函数返回的指针指向BSTR的第一个字符,而不是BSTR在内存的第一个字节。01234567890123450a000000

15、H

16、E

17、L

18、L

19、O

20、/0

21、^

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

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

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