MFC 中 CString 與 std::string 如何相互轉換?
我已知道CString=CString( string.c_str() );但CString怎麼換成string還不清楚,之前在網上看到過string = (LPSTR)(LPCTSTR)CString,但發現轉換後string只有一個字元。
網上找了很久,一些很久以前的方法在VS2013上直接報錯,無法驗證。求大神解疑,感激不盡。
CString可能是unicode編碼(CString通過宏來確定到底是CStringA還是CStringW),因此應該先將之轉化為mbcs編碼,也就是CStringA
CString s = _T("abc");
std::string str = CStringA(s);
你試試看吧,我不知道這種做法是否正宗
vs2015中自帶轉換方法
CString bb,aa="你好";string a,b="你好";
CString -&>string
a=CT2A(aa);string-&>CStringbb=CA2T(b);應該能行,試試吧
CString strString = _T("blablabla");
std::string = CT2CA(strString.GetBuffer(0));
非常有意思,這個問題我在之前有遇到過。微軟在VS2013中去掉了對MBCS的支持,默認都是UNICODE編碼,導致寬位元組與多位元組不同字元編碼的問題。MFC support for MBCS deprecated in Visual Studio 2013
安裝這個多位元組字符集補丁包就可以了。
在VS2013中默認字符集均為UNICODE,可以用W2A宏來轉換。首先需要包含頭文件
#include &在使用前,記得添加一行宏命令USES_CONVERSION;CString strString = _T("test");string str = W2A(strString);CString轉std::string,可以從CStringA中轉下
CString strData = TEXT("hello world");
std::string strTempData = (CStringA)strData;
而std::string轉CString就簡單了,只需要從c風格字元串中轉即可
std::string strData = "hello world";
CString strTempData(stdData.c_str());
std::string &<= CString.GetBuffer(0);
直接放在構造函數裡面就行string newStd(CString);用CString生成string類型的變數newStd
推薦閱讀:
※倘若用文言文語法編程會怎樣?
※「作者都承認 C 和 Unix 不過是惡作劇而已」是真的嗎?
※我該如何規劃、準備大學的計算機課程?
※為什麼程序都要用英文寫,中文不行嗎?