MFC里面CString 与 string 互相转化 的问题。 cstringstring 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString cstr = _T("ABC");USES_CONVERSION;string str(W2A(cstr)); 因为CString里是WCHARstring里是char类型不匹配 因为CString实际是CStringT, 也就是模板类, 它在UNICODE环境下, 实际是CStringW, 而在多字符集下是CStringA而std::string就是多字符集的.因为你的环境可能是UNICODE的, 所以说实际是CStringW, 要转换成多字符集, 当然就只有转码了.CStringW ----> std::string 需要使用WideCharToMultiByte 转换成多字符集, 然后再构造std::stringstd::string -----> CStringW就简单了 因为CStringT模板类已经自动做了 char * 到 wchar_t* 的转码.CString Str;std::string tStr;Str = tStr.c_str(); //注意, CStringT只做了 =号操作符char*到wchar_t*的自动转码.如果你把你的VS环境切换成多字符集, 那就更简单了.CString 实际就是CStringA.CStringA ----> std::string :CString Str;std::string tStr = Str;std::string -----> CStringAstd::string tStr;CString Str = tStr.c_str(); +1这牵扯到字符集的问题:char/wchar_t如果你的工程是多字符集的,按照你提到的那位网友的说法是正确的如果你的工程是Unicode字符集的,必须进行转换才可以(WideCharToMultiByte ) 3楼上说的很详细了,就是unicode和多字符集的问题你可以改变字符集设置为多字符集,就没困扰了 Unicode下,需要将CString -> char* 楼主这个问题我正好也碰到了主是要VS默认是宽字符造成的。我用了如下的办法成功了,也是VS2013,用了网上推荐的办法试了好久发现如下办法可以用:CString filepath;USES_CONVERSION;string tmpstr(W2A(filepath)); //这个tmpstr 就是转换完成的string对象。我用这个完美解决了我的问题。我还用下面的解决了 string 转换为 CString 的问题string tmpstr;CString tmp1(tmpstr.c_str());以上全部都是在VS 2013里用的。 VC++开发IE ToolBar的问题 c++ 如何将jpg文件转换为bmp格式 急! 视图切换的问题,关于scrollView 求VC统计图ActiveX控件 VC 把文件打包 招到 技术总监 散分 来的都有份 !! 基于对话框的程序,怎么在里面加文档视图框架? 请教~~ 老那你进来领分。 听说vc数据库的功能并不强,而vb又说可以,真有点矛盾 怒了,坑爹的书,误导我一年之久 HID 设备发现新设备的问题
USES_CONVERSION;
string str(W2A(cstr));
string里是char
类型不匹配
而std::string就是多字符集的.因为你的环境可能是UNICODE的, 所以说实际是CStringW, 要转换成多字符集, 当然就只有转码了.CStringW ----> std::string 需要使用WideCharToMultiByte 转换成多字符集, 然后再构造std::stringstd::string -----> CStringW就简单了 因为CStringT模板类已经自动做了 char * 到 wchar_t* 的转码.
CString Str;
std::string tStr;
Str = tStr.c_str(); //注意, CStringT只做了 =号操作符char*到wchar_t*的自动转码.如果你把你的VS环境切换成多字符集, 那就更简单了.
CString 实际就是CStringA.CStringA ----> std::string :
CString Str;
std::string tStr = Str;
std::string -----> CStringA
std::string tStr;
CString Str = tStr.c_str();
如果你的工程是Unicode字符集的,必须进行转换才可以(WideCharToMultiByte )
主是要VS默认是宽字符造成的。
我用了如下的办法成功了,也是VS2013,用了网上推荐的办法试了好久发现如下办法可以用:CString filepath;
USES_CONVERSION;
string tmpstr(W2A(filepath)); //这个tmpstr 就是转换完成的string对象。我用这个完美解决了我的问题。
我还用下面的解决了 string 转换为 CString 的问题
string tmpstr;
CString tmp1(tmpstr.c_str());以上全部都是在VS 2013里用的。