环境:vs2010 + win7 64位
如题:
在MFC中CString转化成std::string的方法如下:
std::string str;
CString cstr;
str = cstr.GetBuffer(0);
//str使用...
cstr.ReleaseBuffer();
由于MFC中CString为 ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > ;当定义了_UNICODE宏时,TCHAR = wchar_t,所以,注意将工程->属性->配置属性->常规 中的字符集进行适当更改,以确认为“使用多字节字符集”或者“使用Unicode字符集”。
cstr.GetBuffer(0) : 不是代表从0开始,而是最小容量,代表缓冲区至少有0个字符
GetBuffer()返回LPTSTR指针,在MBCS下它就是char*,在UNICODE下它是unsigned char* ,而char*可直接赋值给string类型。
LPTSTR命名依据(百度百科)
LP:长指针(long pointer)。
T:win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标准的ANSI(单字节表示一个字符)字符串。
STR:表示这个变量是一个字符串。
ReleaseBuffer():结束对由GetBuffer分配的缓冲区的使用,默认参数-1,无返回值。
外链接:http://www.cnblogs.com/leipei2352/archive/2012/11/09/2761755.html