环境: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