日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】

發布時間:2025/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CString與LPCWSTR、LPSTR、char*、LPWSTR等類型的轉換

VC++ 2010-09-25 21:23:12 閱讀457 評論3 ??字號:?訂閱

一.CString與LPCWSTR?

??? 兩者的不同:LPCWSTR 是Unicode字符串指針,初始化時串有多大,申請空間就有多大,以后存貯若超過則出現無法預料的結果,這是它與CString的不同之處。而CString是一個串類,內存空間類會自動管理。

??? 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等函數來完成。

五.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;如果定義了 _MBCS,則T表示A?
??? C const 的縮寫

利用這些宏,可以快速的進行各種字符間的轉換。使用前必須包含頭文件,并且申明USER_CONVERSION;使用 ATL 轉換宏,由于不用釋放臨時空間,所以使用起來非常方便。但是考慮到棧空間的尺寸(VC 默認2M),使用時要注意幾點:

??? 1、只適合于進行短字符串的轉換;?
??? 2、不要試圖在一個次數比較多的循環體內進行轉換;?
??? 3、不要試圖對字符型文件內容進行轉換,因為文件尺寸一般情況下是比較大的;?
??? 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中上面用紅色標記的代碼已經不成立。

VS2005中CString已經改為寬字符型,一些轉換如下:

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等类型的转换【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。