久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

轉(zhuǎn):BSTR,、char*和CString轉(zhuǎn)換

 篩子 2011-07-06

(1) char*轉(zhuǎn)換成CString

若將char*轉(zhuǎn)換成CString,,除了直接賦值外,,還可使用CString::Format進(jìn)行。例如:

char chArray[] = "This is a test";
char * p = "This is a test";

LPSTR p = "This is a test";

或在已定義Unicode應(yīng)的用程序中

TCHAR * p = _T("This is a test");

LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;

 

(2) CString轉(zhuǎn)換成char*

若將CString類轉(zhuǎn)換成char*(LPSTR)類型,,常常使用下列三種方法:

方法一,,使用強(qiáng)制轉(zhuǎn)換。例如:

CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

方法二,,使用strcpy,。例如:

CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);

需要說明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二個參數(shù)是 const wchar_t* (Unicode)或const char* (ANSI),,系統(tǒng)編譯器將會自動對其進(jìn)行轉(zhuǎn)換,。

方法三,使用CString::GetBuffer,。例如:

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在這里添加使用p的代碼
if(p != NULL) *p = _T('/0');
s.ReleaseBuffer();
// 使用完后及時釋放,,以便能使用其它的CString成員函數(shù)

 

(3) BSTR轉(zhuǎn)換成char*

方法一,使用ConvertBSTRToString,。例如:

#include
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[]){
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 用完釋放
delete[] lpszText2;
return 0;
}

方法二,,使用_bstr_t的賦值運(yùn)算符重載。例如:

_bstr_t b = bstrText;
char* lpszText2 = b;

 

(4) char*轉(zhuǎn)換成BSTR

方法一,,使用SysAllocString等API函數(shù),。例如:

BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);

方法二,使用COleVariant或_variant_t,。例如:

//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrVal;

方法三,,使用_bstr_t,這是一種最簡單的方法,。例如:

BSTR bstrText = _bstr_t("This is a test");

方法四,,使用CComBSTR。例如:

BSTR bstrText = CComBSTR("This is a test");

CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_str;

方法五,,使用ConvertStringToBSTR,。例如:

char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);

 

(5) CString轉(zhuǎn)換成BSTR

通常是通過使用CStringT::AllocSysString來實現(xiàn),。例如:

CString str("This is a test");
BSTR bstrText = str.AllocSysString();

SysFreeString(bstrText); // 用完釋放

 

(6) BSTR轉(zhuǎn)換成CString

一般可按下列方法進(jìn)行:

BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;

CStringA str(bstrText);

 

(7) ANSI、Unicode和寬字符之間的轉(zhuǎn)換

方法一,,使用MultiByteToWideChar將ANSI字符轉(zhuǎn)換成Unicode字符,,使用WideCharToMultiByte將Unicode字符轉(zhuǎn)換成ANSI字符。

方法二,,使用“_T”將ANSI轉(zhuǎn)換成“一般”類型字符串,,使用“L”將ANSI轉(zhuǎn)換成Unicode,而在托管C++環(huán)境中還可使用S將ANSI字符串轉(zhuǎn)換成String*對象,。例如:

TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;

方法三,,使用ATL 7.0的轉(zhuǎn)換宏和類。ATL7.0在原有3.0基礎(chǔ)上完善和增加了許多字符串轉(zhuǎn)換宏以及提供相應(yīng)的類,,它具有如圖3所示的統(tǒng)一形式:

其中,第一個C表示“類”,,以便于ATL 3.0宏相區(qū)別,,第二個C表示常量,2表示“to”,,EX表示要開辟一定大小的緩沖,。SourceType和DestinationType可以是A、 T,、W和OLE,,其含義分別是ANSI、Unicode,、“一般”類型和OLE字符串,。例如,CA2CT就是將ANSI轉(zhuǎn)換成一般類型的字符串常量,。下面 是一些示例代碼:

LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多