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-&>CString

bb=CA2T(b);

應該能行,試試吧


CString strString = _T("blablabla");
std::string = CT2CA(strString.GetBuffer(0));


非常有意思,這個問題我在之前有遇到過。

微軟在VS2013中去掉了對MBCS的支持,默認都是UNICODE編碼,導致寬位元組與多位元組不同字元編碼的問題。

MFC support for MBCS deprecated in Visual Studio 2013

解決方法:

下載這個文件並安裝:Multibyte MFC Library for 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 不過是惡作劇而已」是真的嗎?
我該如何規劃、準備大學的計算機課程?
為什麼程序都要用英文寫,中文不行嗎?

TAG:編程語言 | 編程 | C | MFC |