CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】
CString與LPCWSTR、LPSTR、char*、LPWSTR等類型的轉換
VC++ 2010-09-25 21:23:12 閱讀457 評論3 ??字號:大中小?訂閱
一.CString與LPCWSTR?
??? 兩者的不同:LPCWSTR 是Unicode字符串指針,初始化時串有多大,申請空間就有多大,以后存貯若超過則出現(xiàn)無法預料的結果,這是它與CString的不同之處。而CString是一個串類,內(nèi)存空間類會自動管理。
??? CString轉換成LPCWSTR
????方法一:CString strFileName;
???????????????????? LPCWSTR lpcwStr = strFileName.AllocSysString();
??? 方法二:CString str=_T("TestStr");?
??????????????????? USES_CONVERSION;?
??????????????????? LPCWSTR lpcwStr = A2CW((LPCSTR)str);
??? MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR)? -> (LPCWSTR),USER_CONVERSION表示用來定義一些中間變量,在使用ATL的轉換宏之前必須定義該語句。
??? LPCWSTR轉換成CString
??? LPCWSTR lpcwStr = L"TestWStr";?
??? CString str(lpcwStr);
?CString str;
LPWSTR? lpstr = (LPWSTR)(LPCWSTR)str;
二.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 str(lpStr);
????? 注意:CString和LPCSTR可直接轉換,如下:
???????????????????? CString str;
?????????????????????LPCSTR lpcStr = (LPCSTR)str;
三.CString和char*轉換
?????? CString轉換成char*
?????? 方法一:CString str;
???????????????????????char* p = str.GetBuffer();
?????? 方法二:CString str;
???????????????????????char* p = (LPSTR)(LPCSTR)str;
???????char*轉換成CString
?????????????????????? char* p = "test";
???????????????????????CString str = ("%s",p);
四.String和int、float的轉換
??????? 可以使用atoi,atof,atol等函數(shù)來完成。
五.LPSTR(char*)和LPWSTR的轉換
????????可以使用下面的ATL宏來進行,最好是將變量定義成TCHAR、LPTSTR等T類型,可以避免轉換。
ATL宏介紹:
???? A2BSTR???OLE2A???????????? T2A????????????W2A?
???? A2COLE?? OLE2BSTR??? T2BSTR??? W2BSTR?
???? A2CT???????? OLE2CA???????? T2CA????????? W2CA?
???? A2CW??????? OLE2CT???????? T2COLE??? W2COLE?
???? A2OLE?????? OLE2CW?????? T2CW???????? W2CT?
???? A2T????????????OLE2T??????????? T2OLE??????? W2OLE?
???? A2W?????????? OLE2W???????? ?T2W???????????? W2T
??? A :ANSI 字符串,也就是 MBCS。?
??? W、OLE 寬字符串,也就是 UNICODE。?
??? T 中間類型T。如果定義了 _UNICODE,則T表示W(wǎng);如果定義了 _MBCS,則T表示A?
??? C const 的縮寫
利用這些宏,可以快速的進行各種字符間的轉換。使用前必須包含頭文件,并且申明USER_CONVERSION;使用 ATL 轉換宏,由于不用釋放臨時空間,所以使用起來非常方便。但是考慮到棧空間的尺寸(VC 默認2M),使用時要注意幾點:
??? 1、只適合于進行短字符串的轉換;?
??? 2、不要試圖在一個次數(shù)比較多的循環(huán)體內(nèi)進行轉換;?
??? 3、不要試圖對字符型文件內(nèi)容進行轉換,因為文件尺寸一般情況下是比較大的;?
??? 4、對情況 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
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];
?TCHAR sex[5] ;
?char *p = name;
?TCHAR *pw = sex;
?LPSTR lpstr = name;
?LPCSTR lpcstr = name;
?lpcstr = lpstr;
?
?lpstr = p;
?p = (char*)sex;
?pw = (WCHAR*)name;
?LPWSTR lpwstr = (LPWSTR)lpstr;
?lpwstr = (LPWSTR)lpcstr;
?LPCWSTR lpcwstr = (LPCWSTR)lpstr;
?lpcwstr = (LPCWSTR)name;
?CString str(lpstr);
?CString str1(lpcstr);
?CString str2(lpwstr);
?CString str3(lpcwstr);
?CString str4(name);
?CString str5(sex);
?lpwstr = (LPWSTR)(LPCWSTR)str;
?lpstr = (LPSTR)(LPCWSTR)str;
?lpcstr = (LPCSTR)(LPCWSTR)str;
?p = (char*)str.GetBuffer();
?pw = str.GetBuffer();
可以看出轉換更加簡單了,基本上可以直接轉換,A2W等宏基本上不需要啦
總結
以上是生活随笔為你收集整理的CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言写天气预报程序,微信小程序实现天气
- 下一篇: MFC获得主窗口和父窗口指针