设为首页 加入收藏

TOP

计算机二级辅导:VC字符串转换
2014-11-13 00:26:11 】 浏览:7800
Tags:计算机 二级 辅导 :VC 字符串 转换

  一、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 date; // VT_DATE.


  BSTR bstrVal; // VT_BSTR.


  …


  short * piVal; // VT_BYREF|VT_I2.


  long * plVal; // VT_BYREF|VT_I4.


  float * pfltVal; // VT_BYREF|VT_R4.


  double * pdblVal; // VT_BYREF|VT_R8.


  DATE * pdate; // VT_BYREF|VT_DATE.


  BSTR * pbstrVal; // VT_BYREF|VT_BSTR.


  };


  };


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++杂记 下一篇C++的一些基础细节(备考用)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目