|
一.CString與LPCWSTR 兩者的不同:LPCWSTR 是Unicode字符串指針,初始化時(shí)串有多大,申請(qǐng)空間就有多大,以后存貯若超過則出現(xiàn)無法預(yù)料的結(jié)果,這是它與CString的不同之處。而CString是一個(gè)串類,內(nèi)存空間類會(huì)自動(dòng)管理。 CString轉(zhuǎn)換成LPCWSTR 方法一:CString strFileName; LPCWSTR lpcwStr = strFileName.AllocSysString(); 方法二:CString str=_T("TestStr"); MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR) -> (LPCWSTR),USER_CONVERSION表示用來定義一些中間變量,在使用ATL的轉(zhuǎn)換宏之前必須定義該語句。 LPCWSTR轉(zhuǎn)換成CString LPCWSTR lpcwStr = L"TestWStr"; 二.CString與LPSTR轉(zhuǎn)換 CString轉(zhuǎn)換成LPSTR: 方法一:CString strFileName; LPSTR lpStr = strFileName.GetBuffer(); strFileName.ReleaseBuffer(); 方法二:CString strFileName; LPSTR lpStr = (LPSTR)(LPCSTR)strFimeName; LPSTR轉(zhuǎn)換成CString: LPSTR lpStr = L"TestStr"; 注意:CString和LPCSTR可直接轉(zhuǎn)換,如下: CString str; LPCSTR lpcStr = (LPCSTR)str; 三.CString和char*轉(zhuǎn)換 四.String和int、float的轉(zhuǎn)換 可以使用atoi,atof,atol等函數(shù)來完成。 五.LPSTR(char*)和LPWSTR的轉(zhuǎn)換 可以使用下面的ATL宏來進(jìn)行,最好是將變量定義成TCHAR、LPTSTR等T類型,可以避免轉(zhuǎn)換。 ATL宏介紹: A2BSTR OLE2A T2A W2A A :ANSI 字符串,也就是 MBCS。 利用這些宏,可以快速的進(jìn)行各種字符間的轉(zhuǎn)換。使用前必須包含頭文件,并且申明USER_CONVERSION;使用 ATL 轉(zhuǎn)換宏,由于不用釋放臨時(shí)空間,所以使用起來非常方便。但是考慮到??臻g的尺寸(VC 默認(rèn)2M),使用時(shí)要注意幾點(diǎn): 1、只適合于進(jìn)行短字符串的轉(zhuǎn)換; void Func1(LPSTR lpStr); void Func2(LPWSTR lpwStr); TCHAR name[256]; TCHAR* pName = new TCHAR[256]; Func1(name); // Func1(pName); Func2(name); // Func2(pName); 注意在VS2005中上面用紅色標(biāo)記的代碼已經(jīng)不成立。 VS2005中CString已經(jīng)改為寬字符型,一些轉(zhuǎn)換如下: char name[10]; LPSTR lpstr = name; CString str(lpstr); lpwstr = (LPWSTR)(LPCWSTR)str; p = (char*)str.GetBuffer(); 可以看出轉(zhuǎn)換更加簡單了,基本上可以直接轉(zhuǎn)換,A2W等宏基本上不需要啦。 |
|
|