VC中各种字符串之间的相互转换

2012-02-11 19:57:33|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 字符处理|来源:唯设编程网

VC中有多种关于字符串的类型,如果对这些类型不彻底了解在使用中就会出现各种各样的错误,特别是开发一些COM组件的时候,在开发过程中经常会用到 一些字符串类型之间的转换,由于以前对这些类型没有认真研究过在使用过程中出现了一些问题,本文总结了各种字符串类型的特点和引用场合,以让读者能够快速掌握VC常用的各种字符串类型。

1、TCHAR类型    

char是C语言标准数据类型,字符型,至于由几个字节组成通常由编译器决定,一般一个字节。Windows为了消除各 编译器的差别,重新定义了一些数据类型,你提到了另外几个类型都是这样。
   CHAR为单字节字符。还有个WCHAR为Unicode字符,即不论中英文,每个字有两个字节组成。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHAR。

2、 BSTR类型    

BSTR类型是COM中使用的标准字符串类型。它其实是一个32位指针,保存字符串首字符的地址。既然是指针类型,好的习惯应该是在定义一个BSTR类型 变量时立刻初始化为NULL,即使随后立刻就会对其进行赋值。

3、CComBSTR类型

CComBSTR 是ATL对BSTR的封装,它的操作比较方便。例如:

CComBSTR bstr1;
bstr1 = "Bye"; // 直接赋值
OLECHAR* str = OLESTR("ta ta"); // 长度为5的宽字符
CComBSTR bstr2(wcslen(str)); // 定义长度为5
wcscpy(bstr2.m_str, str); // 将宽字符串复制到BSTR中
CComBSTR bstr3(5, OLESTR("Hello World"));
CComBSTR bstr4(5, "Hello World");
CComBSTR bstr5(OLESTR("Hey there"));
CComBSTR bstr6("Hey there");
CComBSTR bstr7(bstr6);
// 构造时复制,内容为"Hey there" 

对CComBSTR更多了解可以参考下面链接:http://www.cppblog.com/kyelin/articles/18015.html

4、LPSTR类型
   
LPSTR和LPCSTR 类型其实是一样的。都被定义为 CHAR*. 也就是单字节字符串指针。其结尾处有一个'/0'表示字符结束。也就是C风格的字符串.

5、_bstr_t类型

    _bstr_t在VC中是为了兼容BSTR类型而增加的,也就是为了实现LPCSTR与BSTR转换。

它需要头文件#include <comdef.h>

_bstr_t 是BSTR的包装类,转换方法:

LPSTR   strDemo="Test";  
_bstr_t   bstr(strDemo);  

  建议加上try,catch,用于catch(_com_error &e) 

发表评论0条 】
网友评论(共?条评论)..
VC中各种字符串之间的相互转换