一个简单方便的ANSI和UNICODE互转方法

最近多次使用_bstr_t这个封装BSTR类,发现微软封装得还挺不错的,能很简单方便的ANSI和UNICODE互转。

VC6.0默认是没添加_bstr_t 类的支持头文件comdef.h,还需要用#include <comdef.h>添加头文件。

_bstr_t bstr; bstr = "This is ANSI!!!"; //赋值是ANSI ::MessageBoxW(NULL, bstr, L"UNICODE", MB_OK); //使用是UNICODE bstr = L"This is UNICODE!!!"; //赋值是UNICODE ::MessageBoxA(NULL, bstr, "ANSI", MB_OK); //使用是ANSI bstr = _T("This is Text!!!"); ::MessageBox(NULL, bstr, _T("Text"), MB_OK);

为什么能这样用呢?我们来看看_bstr_t的等号操作符

_bstr_t& operator=( const _bstr_t& s1 ) throw ( ); _bstr_t& operator=( const char* s2 ); _bstr_t& operator=( const wchar_t* s3 ); _bstr_t& operator=( const _variant_t& var );

_bstr_t重载了const char*和 const wchar_t*等号操作符,就是说可以用这两种类型的变量直接给_bstr_t对象赋值。

注:_bstr_t的构造函数也做了类似的重载,具体参考MSDN

我们再来看_bstr_t提取等号操作符

operator const wchar_t*( ) const throw( ); operator wchar_t*( ) const throw( ); operator const char*( ) const; operator char*( ) const;

这就是说我们可以把_bstr_t当成const wchar_t*和const char*来使用,所以就出现了上面的示例代码。

提取等号操作符的时候请注意:这些操作符可用于提取封装的Unicode或多字节BSTR对象的原始指针。操作符返回实际的内部缓冲区的指针,这样生成的字符串不能被修改。

故需要修改该字符串的时候最好是把数据用

_tcscpy

strcpy

_mbscpy

wcscpy

拷贝的别的地方再处理,或者是放在CString中处理。

 

总的来说_bstr_t感觉就是一个超级强悍的”TEXT“或者”_T“转换。

 

写完后搜了下,也找到篇和这个思路一样的文章《字符串转换:wchar_t MultiByteToWideChar Unicode等 》。

 

你可能感兴趣的:(null,微软)