BSTR、char*和CString转换

本文详细介绍了在C++中将char*、CString、BSTR等不同类型字符串之间的转换方法,包括强制转换、使用CString::Format、strcpy及CString::GetBuffer等函数的应用场景和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1) char*转换成CString
      若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如

        

[cpp]  view plain copy
  1. char chArray[] = 'This is a test';  
  2. char * p = 'This is a test';  
  3.   
  4.   或  
  5.   
  6. LPSTR p = 'This is a test';  
  7.   
  8.   或在已定义Unicode应的用程序中  
  9.   
  10. TCHAR * p = _T('This is a test');  
  11.   
  12.   或  
  13.   
  14. LPTSTR p = _T('This is a test');  
  15. CString theString = chArray;  
  16. theString.Format(_T('%s'), chArray);  
  17. theString = p;  

(2) CString转换成char*

  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法

       

[cpp]  view plain copy
  1. 方法一,使用强制转换。例如:  
  2.   
  3. CString theString( 'This is a test' );  
  4. LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;  
  5.   
  6.   方法二,使用strcpy。例如:  
  7.   
  8. CString theString( 'This is a test' );  
  9. LPTSTR lpsz = new TCHAR[theString.GetLength()+1];  
  10. _tcscpy(lpsz, theString);  
  11.   
  12.   需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。  
  13.   
  14.   方法三,使用CString::GetBuffer。例如:  
  15.   
  16. CString s(_T('This is a test '));  
  17. LPTSTR p = s.GetBuffer();  
  18. // 在这里添加使用p的代码  
  19. if(p != NULL) *p = _T('');  
  20. s.ReleaseBuffer();  
  21. // 使用完后及时释放,以便能使用其它的CString成员函数  


(3) BSTR转换成char*    

[cpp]  view plain copy
  1. 方法一,使用ConvertBSTRToString。例如:  
  2.   
  3.             pragma comment(lib, 'comsupp.lib')  
  4.           int _tmain(int argc, _TCHAR* argv[])  
[cpp]  view plain copy
  1. {  
  2.     BSTR bstrText = ::SysAllocString(L'Test');  
  3.     char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);  
  4.     SysFreeString(bstrText); // 用完释放  
  5.       delete[] lpszText2;  
  6.     return 0;  

}

[cpp]  view plain copy
  1. 方法二,使用_bstr_t的赋值运算符重载。例如:  
  2.   
  3. _bstr_t b = bstrText;  
  4. char* lpszText2 = b;  

        (4) char*转换成BSTR

  

[cpp]  view plain copy
  1. 方法一,使用SysAllocString等API函数。例如:  
  2.   
  3. BSTR bstrText = ::SysAllocString(L'Test');  
  4. BSTR bstrText = ::SysAllocStringLen(L'Test',4);  
  5. BSTR bstrText = ::SysAllocStringByteLen('Test',4);  
  6.   
  7.   方法二,使用COleVariant或_variant_t。例如:  
  8.   
  9. //COleVariant strVar('This is a test');  
  10. _variant_t strVar('This is a test');  
  11. BSTR bstrText = strVar.bstrVal;  
  12.   
  13.   方法三,使用_bstr_t,这是一种最简单的方法。例如:  
  14.   
  15. BSTR bstrText = _bstr_t('This is a test');  
  16.   
  17.   方法四,使用CComBSTR。例如:  
  18.   
  19. BSTR bstrText = CComBSTR('This is a test');  
  20.   
  21.   或  
  22.   
  23. CComBSTR bstr('This is a test');  
  24. BSTR bstrText = bstr.m_str;  
  25.   
  26.   方法五,使用ConvertStringToBSTR。例如:  
  27.   
  28. char* lpszText = 'Test';  
  29. BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);  

 

(5) CString转换成BSTR
     

[cpp]  view plain copy
  1. 通常是通过使用CStringT::AllocSysString来实现。例如:  
  2.   
  3. CString str('This is a test');  
  4. BSTR bstrText = str.AllocSysString();  
  5. …  
  6. SysFreeString(bstrText); // 用完释放  

(6) BSTR转换成CString
 

[cpp]  view plain copy
  1. 一般可按下列方法进行:  
  2.   
  3. BSTR bstrText = ::SysAllocString(L'Test');  
  4. CStringA str;  
  5. str.Empty();  
  6. str = bstrText;  
  7.   
  8.   或  
  9.   
  10. CStringA str(bstrText);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值