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)