string转CString

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

比如网上常见的一种转换方法(如果你的能直接转换也是没问题滴):

哦吼,发现转不了,就很气。提示错误为:no suitable constructor exists to convert from “const char *” to “ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>>” ,翻译一下大概就是说:没有合适的构造函数来进行那个类型的转换。

为什么呢?原因就是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:宽字符串,也就是UNICODEstd::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字符串转换宏来完成。方法比较多,大家可以自行尝试。

CString与string转换相关推荐

  1. MFC中的CString.Format及CString,string,char*之间的转换

    1.CString.Format的使用:https://blog.csdn.net/wangkaishou/article/details/5846152 2.CString,string,char* ...

  2. CString与string、char*的区别和转换

    我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...

  3. MFC中char*,string和CString之间的转换

    string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的: char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的.所以熟练掌握三者之间的转换十 ...

  4. CString,int,string,char*之间的转换(转)

    ............................................................... <C++标准函数库>中说的   有三个函数可以将字符串的内容 ...

  5. MFC之CString与const char* string 转换

    MFC开发时经常会遇到CString.string/std::string.char*等类型相互转换的问题,现将一些思考与心得记下来与大家分享: 一.CString强制类型转换为const char* ...

  6. CString,int,string,char*之间的转换

    <C++标准函数库>中说的   有三个函数可以将字符串的内容转换为字符数组和C-string   1.data(),返回没有"\0"的字符串数组   2,c_str() ...

  7. cstring转为string vc_VC之CString,wchar_t,int,string,char*之间的转换-阿里云开发者社区

    VC之CString,wchar_t,int,string,char*之间的转换 1. CString 转 wchar_t CString path = "asdf"; wchar ...

  8. CString类的转换

    通过阅读本文你可以学习如何有效地使用 CString. CString 是一种很有用的数据类型.它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多.不管怎样,使用CStr ...

  9. MFC C++ Cstring与string互转

    CString 转换成string 我试了很多的方法,都不行,我用的vs2010 ------解决方案-------------------- unicode: CString sz1 = L&quo ...

最新文章

  1. python的难点在哪里_自己写的Python答案,不知道错在哪儿希望能被告知问题在哪儿和答案...
  2. 第三课.python编程基础(二)
  3. Lesson11 vSphere VUM
  4. 浅谈javascript中的数据类型和引用类型
  5. Codeforces Round #744 (Div. 3)【A-D E的题解】
  6. 期末复习、化学反应工程科目(第八、九章)
  7. Python修饰器的函数式编程
  8. [FPGA][DE0] Qsys 加入 FLASH 記憶體 方法及步驟
  9. 我做的两个游戏的免CD补丁
  10. JVM常用垃圾收集器
  11. java 模拟 cmd_用JAVA模拟实现CMD命令行
  12. NYOJ 61:传纸条(一)(三维DP)
  13. Oracle数据库常用脚本
  14. 控制理论基础(1)--控制工程概述
  15. web压力测试工具比较
  16. [转]RTP协议全解析(H264码流和PS流)
  17. android自定义速度仪表盘,自定义View实战:汽车速度仪表盘
  18. 心愿未了有牵绊。生命不息,折腾未止。
  19. EL表达式中获取 list集合长度
  20. visio2013取消跨线(交叉时凸起的小圆弧)

热门文章

  1. 域名与IP地址的联系与区别
  2. 好程序员云计算培训分享2020年云计算的发展趋势
  3. Extended Feature Pyramid Network for Small Object Detection
  4. 业界分享 | 深度学习下的京东搜索召回技术
  5. JavaScript常用库—jQuery
  6. 基于SSM的医药信息管理系统
  7. 怎么避免域名被微信封杀,微信域名防封需要注意哪些问题。
  8. 轨迹误差评估指标[APE/RPE]和EVO[TUM/KITTI]
  9. android底层音频调试,Android音频底层调试-基于tinyalsa,使用中碰到问题
  10. 菌群分析Linux,Qiime1-13.菌群组成与指标相关性分析(自带命令及MaAslin)