VC++ vs vs2005 char cstring int 字符串 转换 (1)

本文详细介绍了VC++中BSTR、LPSTR、LPWSTR等字符串类型及其转换,包括与Unicode、ANSI的关系,以及与CString、COleVariant、_variant_t、CComBSTR、_bstr_t等类的相互转换。此外,还讨论了如何在不同字符集间进行转换,如使用MultiByteToWideChar和WideCharToMultiByte等方法。
摘要由CSDN通过智能技术生成

一、BSTR、LPSTR和LPWSTR 

  在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。 

  那么什么是BSTR、LPSTR以及LPWSTR呢? 

  BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的 API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。 

  LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI 字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中,还有类似的字符串类型,如LPTSTR、 LPCTSTR等,它们的含义如图2所示。 

  例如,LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为 char*。 

  一般地,还有下列类型定义: 

#ifdef UNICODE 
 typedef LPWSTR LPTSTR; 
 typedef LPCWSTR LPCTSTR; 
#else 
 typedef LPSTR LPTSTR; 
 typedef LPCSTR LPCTSTR; 
#endif 

  二、CString、CStringA 和 CStringW 

  Visual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类,它有CString、CStringA和CStringW三种形式,分别操作不同字符类型的字符串。这些字符类型是TCHAR、char和wchar_t。TCHAR在Unicode平台中等同于WCHAR(16位 Unicode字符),在ANSI中等价于char。wchar_t通常定义为unsigned short。由于CString在MFC应用程序中经常用到,这里不再重复。 

  三、VARIANT、COleVariant 和_variant_t 

  在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版: 

struct tagVARIANT { 
 VARTYPE vt; 
 union { 
  short iVal; // VT_I2. 
  long lVal; // VT_I4. 
  float fltVal; // VT_R4. 
  double dblVal; // VT_R8. 
  DATE dat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值