1. 程式人生 > >MFC C++ Cstring與string互轉

MFC C++ Cstring與string互轉

CString 轉換成string我試了很多的方法,都不行,我用的vs2010------解決方案--------------------unicode:CString sz1 = L"abc";std::string sz2 = CT2A(sz1.GetBuffer()); //轉化為非unicode.非unicode:CString sz1 = "abc";std::string sz2 = sz1.GetBuffer();  ------解決方案--------------------樓上正解,再提供幾個UNICODE下的方法

C/C++ code
//方法一
CString theCStr;
std::string STDStr( CW2A( theCStr.GetString() ) );       //採用的方法
//方法二 CString m_Name; CT2CA pszName(m_Name); std::string m_NameStd(pszName); //方法三 CString str = L"Test"; std::wstring ws(str); std::string s; s.assign(ws.begin(), ws.end());
CString/string 區別及其轉化
利用MFC進行程式設計時,我們從對話方塊中利用GetWindowText得到的字串是CString型別,CString是屬於MFC的類。而一些標準C/C++庫函式是不能直接對CString型別進行操作的,所以我們經常遇到將CString型別轉化char*等等其他資料型別的情況。這裡總結備忘於此! 首先要明確,標準C中是不存在string型別的,string是標準C++擴充字串操作的一個類。但是我們知道標準C中有string.h這個標頭檔案,這裡要區分清楚,此string非彼string。string.h這個標頭檔案中定義了一些我們經常用到的操作字串的函式,如:strcpy、strcat、strcmp等等,但是這些函式的操作物件都是char*指向的字串。 而C++的string類操作物件是string型別字串,該類重灌了一些運算子,添加了一些字串操作成員函式,使得操作字串更加方便。有的時候我們要將string串和char*串配合使用,所以也會涉及到這兩個型別的轉化問題。1.CString
和string的轉化 stringstr="ksarea";CStringcstr(str.c_str());//或者CString cstr(str.data());初始化時才行cstr=str.c_str();或者cstr=str.data();str=cstr.GetBuffer(0); //CString -> stringcstr.format("%s", str.c_str()); //string->CStringcstr.format("%s", str.data()); //string->CStringstr = LPCSTR(cstr); //CString->string/*c_str()和data()區別是:前者返回帶'/0'的字串,後者則返回不帶'/0'的字串*/ 2.CString
和int的轉換 inti=123;CStringstr;str.format("%d",i);//int->CString 其他的基本型別轉化類似i=atoi(str);//CString->int 還有(atof,atol) 3.char*和CString的轉換 CStringcstr="ksarea";char* ptemp=cstr.getbuffer(0);char* str;strcpy(str,ptemp);//CString->char*cstr.releasebuffer(-1);char*str="lovesha";CStringcstr=str;//char*->CString string型別不能直接賦值給CString 至於int與float、string與char*之間的轉化可以使用強制轉化,或者標準庫函式進行。對於CString與其他型別的轉化方法很多,但其實都殊途同歸,朝著一個方向即將型別首先轉化為char*型別,因為char*是不同型別之間的橋樑。得到char*型別,轉化為其他型別就非常容易了。