欢迎来到天天文库
浏览记录
ID:16360608
大小:67.10 KB
页数:30页
时间:2018-08-09
《数据结构域算法设计-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.L
3、IBOLEAUT32.dllAtlCComBSTR多用在atl的组件实现和使用方面,包含atlbase.hatl.libatl.dllunicode和com有很大的相同------都是双字节。MS将组件的通用字符串类型定义为双字节了。BSTR前进的第一步是双字节;前进的另一步是字符串长度的解决方法。以0结尾的通用的字符串解决方式简单明了;但是在那内存寸土寸金的年代,讲求速度、最大化发挥软件的功能和效率,为所有字符串都省去求长这一步,在最简单的地方前进一步,产生的收益却是无穷大。2. 字符串的转换转换与使用的场合相结合。总结如下场合 分支字
4、符串说明MFCCStringMFC对兼容unicode的封装通用标准BSTRIDL中使用comc++_bstr_t多用在使用组件时,非MFC程序也可以使用。_bstr_t实际上是将charwchar_tBSTR转换为wchar_t*;同时又可以转换为charwchar_tBSTR注意:里面的转换函数使用的是标准c++AtlCComBSTR多用在atl的组件实现和使用方面,CcomBSTR实际上是也是将非BSTR转换为BSTR的副本但不支持转换为其它非BSTR类型注意:里面的转换函数使用的是winapi说明:BSTR实际上可以直接作为wch
5、at_t*来使用。3 BSTR简介COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++字符串是以0结束的ASCII或Unicode字符数组VisualBasic字符串是一个ASCII字符数组加上表示长度的前缀。Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言。在C++中,就是BSTR。BSTR是"BasicSTRing"的简称,微软在COM/OLE中定义的标准字符串数据类型。对于C++,Windows头文件wtypes.h中定义如下:
6、typedefwchar_tWCHAR;typedefWCHAROLECHAR;typedefOLECHAR__RPC_FAR*BSTR;在COM中,字符用16-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结尾的简单字符串在
14、COMcomponent间传递不太方便。因此,标准BSTR是一个有长度前缀和null结束符的OLECHAR数组。BSTR的前4字节是一个表示字符串长度的前缀。BSTR长度域的值是字符串的字节数,并且不包括0结束符。由于是Unicode串,所以字符数是字节数的一半。这种方式的优点是允许程序员在BSTR串中间嵌入NULL字符。但是,BSTR的前四个字节表示长度,而OLECHAR数组的前四字节表示前两个字符。这种情况下,对于C++程序,如何实现BSTR和OLECHAR的交换?答案是COM提供了两个BSTR分配用的API:SysAllocStri
15、ng/SysReallocString。函数返回的指针指向BSTR的第一个字符,而不是BSTR在内存的第一个字节。01234567890123450a000000
16、H
17、E
18、L
19、L
20、O
21、/0
22、^
此文档下载收益归作者所有