CString与string转换

CString与string转换string 转 CString 在使用 MFC 时 遇到了 CString 与 string 转换的问题 特此记录下来 其实 CString 与 string 的转换方式有挺多种的 但也并不是每一种都适用 可能需要一些稍微的改动才能正常运行 比如网上常见的一种转换方法 如果你的能直接转换也是没问题滴 哦吼 发现转不了 就很气 提示错误为 nosuitableco constchar to ATL CStringT

string转CString

在使用MFC时,遇到了CString与string转换的问题,特此记录下来。其实CString与string的转换方式有挺多种的,但也并不是每一种都适用,可能需要一些稍微的改动才能正常运行。

为什么呢?原因就是CString c_name = name.c_str();其实是需要调用拷贝构造函数的,但是类型不匹配,所以找不到合适的构造函数。

解决方法1:通过修改编码方式,可以解决。我的是在Unicode编码方式下不能使用,修改为“多字节”编码方式即可。
(1)右键项目->“属性”->选择“多字节”。
在这里插入图片描述
(2)编译即可通过。
在这里插入图片描述
解决方法2:修改编码可能导致程序中其它地方出现错误(我的就是- -!)。所以可以调用“赋值运算符重载”的方式来完成转换,很简单也很实用。不用修改编码方式










std::string name = "li"; CString c_name; c_name = name.c_str(); //注意这里使用的是 =运算符的重载 

也可以直接写个函数用:

CString Str2Cstr(string str) { 
    return CString(str.c_str()); } 

解决方法3:也可在“多字节”编码下使用如下方式进行转换。

std::string name = "li"; CString c_name; c_name.Format("%s",name.c_str()); 

解决方法4:该方法是比较通用的,通过使用ATL字符串转换宏。

//CA2T含义 //C:convert,转换的意思 //A:ANSI字符串,也就是Muti-Byte //2:to //T:中间类型,如果定义了_UNICODE,则T表示W;如果定义了_MBCS,则T表示A //W:宽字符串,也就是UNICODE std::string name = "li"; CString c_name = CA2T(name.c_str()); //所以CA2T也就是CA2W就是将多字符集转换为宽字符UNICODE,也可写成CA2W。 

CString转string

(1)多字节编码下:

CString c_name = "li"; std::string str = c_name.GetBuffer(); 

(2)Unicode编码下:

//CT2A含义 //C:convert,转换的意思 //T:中间类型,如果定义了_UNICODE,则T表示W;如果定义了_MBCS,则T表示A //W:宽字符串,也就是UNICODE //A:ANSI字符串,也就是Muti-Byte。 CString c_name = _T("li"); //所以CT2A其实就是CW2A就是将Unicode转换为多字符集ASCII,也可写成CW2A std::string str = CT2A(c_name.GetString()); 

总结

综上所述,其实string和CString的转换都可以使用ATL字符串转换宏来完成。方法比较多,大家可以自行尝试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206216.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:11
下一篇 2026年3月19日 下午4:12


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号