- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC字符串之间的转换
字符串的转换字符串转换用到的地方很多,常见的字符串类型有以下几种:char wchartchar BSTR _bstr_tCComBSTRCString string。最常涉及到的是在BSTR和CString之间相互转换。1.字符串的根本及其封装其实最基本的字符或串,深究到底,只有三种:字符字符串说明charLPSTR LPCSTR单字节,以 0 标记结束wchar_tLPWSTR LPWCSTR双字节,以 0 标记结束?BSTR双字节,前面有4个byte长,用来装字节数。这表明一个BSTR串可能包含多个0而至于以下的封装,其目的多是对其中一种进行封装,并提供了转入和转出的接口。而封装的方式分为两条线,unicode方式和com方式。Windows的兼容UNICODE封装字符字符串说明charLPSTR LPCSTRAnsi单字节wchar_tLPWSTR LPWCSTRUnicode双字节TCHARLPTSTR LPCTSTRCString兼容Ansi和unicode的?Windows的兼容com封装分支字符串说明通用标准BSTR多用在IDL中,作为标准接口对外兼容各类语言的使用者com c++_bstr_t多用在c++的实现和使用,既有MFC也有标准C++包含comdef.h OLEAUT32.LIB OLEAUT32.dllAtlCComBSTR多用在atl的组件实现和使用方面,包含atlbase.h atl.lib atl.dllunicode和com有很大的相同都是双字节。MS将组件的通用字符串类型定义为双字节了。BSTR前进的第一步是双字节;前进的另一步是字符串长度的解决方法。以0结尾的通用的字符串解决方式简单明了;但是在那内存寸土寸金的年代,讲求速度、最大化发挥软件的功能和效率,为所有字符串都省去求长这一步,在最简单的地方前进一步,产生的收益却是无穷大。2.?字符串的转换转换与使用的场合相结合。总结如下场合?分支字符串说明MFCCStringMFC对兼容unicode的封装通用标准BSTRIDL中使用com c++_bstr_t多用在使用组件时,非MFC程序也可以使用。_bstr_t实际上是将char wchar_t BSTR转换为wchar_t*;同时又可以转换为 char wchar_t BSTR注意:里面的转换函数使用的是标准c++AtlCComBSTR多用在atl的组件实现和使用方面,CcomBSTR实际上是也是将非BSTR转换为BSTR的副本但不支持转换为其它非BSTR类型注意:里面的转换函数使用的是win api说明: BSTR实际上可以直接作为wchat_t * 来使用。3?BSTR简介COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++ 字符串是以0结束的ASCII或Unicode字符数组Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言。在C++中,就是BSTR。BSTR是Basic STRing的简称,微软在COM/OLE中定义的标准字符串数据类型。对于C++,Windows头文件wtypes.h中定义如下:typedefwchar_t WCHAR;typedef WCHAR OLECHAR;typedef OLECHAR __RPC_FAR *BSTR;在COM中,字符用16-bit OLECHAR表示,这样使COM可以支持各种code pages,包括Unicode。对于windows系统,可以简单理解为OLECHAR使用的就是Unicode 。OLECHAR串与单字节字符串很类似,是一个以null结尾的buffer。唯一的区别是每个字符占两个字节,而不是一个 0 1 2 3 4 5 6 7 8 9 0 1| H | E | L | L | O | /0| ^OLCHAR使用以Null结尾的简单字符串在COM component间传递不太方便。因此,标准BSTR是一个有长度前缀和null结束符的OLECHAR数组。BSTR的前4字节是一个表示字符串长度的前缀。BSTR长度域的值是字符串的字节数,并且不包括0结束符。由于是Unicode串,所以字符数是字节数的一半。这种方式的优点是允许程序员在BSTR串中间嵌入NULL字符。但是,BSTR的前四个字节表示长度,而OLECHAR数组的前四字节表示前两个字符。这种情况下,对于C++程序,如何实现BSTR和OLECHAR的交换?答案是COM提供了两个BSTR分配用的API:SysAllocString / SysReallocString。函
文档评论(0)