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