前段时间学习mfc编了一个小程序,其中涉及到CString 与string的转换的时候感觉特别蛋疼,因此再此总结一下经验。希望能够对大家能有所帮助

通常有两种字符集模式  unicode字符集 和 ascii字符集,其中unicode有多种编码方式。utf8, utf16和utf32,还有 utf7, 再其中。utf8 和ascii编码兼容, 但是使用两个以上的字节存储中文等。 wstring实际上用的是宽字符。所有的字符都用两个字节存储(windows)。

stringg -> CString
通常的方法是

CString.format("%s", string.c_str());

但是 :

在vs2010 的情况下,是结果运行出来的是乱码,原因是CString.Format把string的每两个char当作一个wchar进行了转换,结果会是一串乱码。

网上各种大神们主要给出来以下几种解决方案

1.直接把设置改为多字符集即是项目->(项目)属性->配置属性->常规..里面有个字符集..字符集选成使用多字节字符集...(我用的是vs2010)这样直接跳过了字符转换,使用asci编码。如果不想费心的话可以这样试试

2. 在不修改字符集的情况下,Unicode编码使用用wstring,wcstring,wchar 推荐使用这样,因为unicode的界面明显美观且更为通用

3.使用MultiByteToWideChar函数,有关这个函数的说明可以去msdn上面去搜索

4.还有一种是ms提供的一种解决方法

ATL 7.0 中引入了相应的宏,建议自己去阅读msdn中相应的类容

CA2T szr(s.c_str());
   CString = (LPCTSTR)szr;//(LPCTSTR)为强制类型转换

网上有人说这种方法不安全,主要是作用域的问题,具体我也不太明白

cstring to string

vs2010 Unicode下:
  CStringW str(L"test"); 
  CStringA stra(str.GetBuffer(0)); 
  str.ReleaseBuffer(); 
  std::string strs (stra.GetBuffer(0)); 
  stra.ReleaseBuffer();

C++ MFC string转Cstring为什么会乱码相关推荐

  1. 如何解决string转CString乱码问题?

    如何解决string转CString乱码问题? string str = "hello"; CString cstr = (CString)str.c_str();

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

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

  3. MFC中的CString类使用方法指南

    MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...

  4. string与cstring区别

    1.string与cstring有什么区别 是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_string的typedef) ...

  5. string/string.h/cstring头文件的区别摘要

    1. #include <cstring>   //不可以定义string s:可以用到strcpy等函数 using   namespace   std; #include <st ...

  6. 头文件 string.h cstring string 区别

    1. #include <cstring>   //不可以定义string s:可以用到strcpy等函数 using   namespace   std; #include <st ...

  7. java string的头文件_头文件 string.h cstring string 区别

    1. #include    //不可以定义string s:可以用到strcpy等函数 using   namespace   std; #include    //可以定义string s:可以用 ...

  8. string和cstring头文件的区别

    1.string与cstring有什么区别 <string>是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_s ...

  9. C++不区分大小写比较string类似CString.compareNoCase

    使用transform();全转化为小写,然后对比string #include <string> #include <algorithm> using namespace s ...

最新文章

  1. android Intent onNewIntent 什么时候调用
  2. 学习笔记-Redis设计与实现-跳跃表
  3. 用ASP实现隐藏链接方法
  4. 适合程序员的四大字体
  5. 论管理员的不作为!!!
  6. 阿里DIN模型(深度兴趣网络)详解及理解
  7. crt 8.7.3 黑暗模式_科技有意思 | 黑黑黑黑黑黑黑黑暗模式
  8. Python元组的操作
  9. Python利用Spark并行处理框架批量判断素数
  10. 多行溢出文字省略号显示(HTML、CSS)
  11. Chrome浏览器安装Axure插件教程
  12. 联想Y450电源管理无法调节屏幕亮度的解决办法
  13. CAN总线的CRC校验
  14. 在线流程图和思维导图开发技术详解(三)
  15. Ubuntu18.04之微信中文乱码解决(五十八)
  16. 如何把本机的文件共享到VMware虚拟机
  17. python3+pyqt5实现简易机票预订系统
  18. V4L2视频驱动框架---v4l2_device管理模块简述
  19. 基于layui的动态添加条件查询ui插件
  20. java自定义排序函数_JAVA中sort函数的 自定义排序 cmp函数的写法 【java】【cmp】...

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 0689-22T老年心理健康 参考试题
  2. [渝粤教育] 中国地质大学 数据结构 复习题 (2)
  3. 【渝粤教育】广东开放大学 地基与基础 形成性考核 (27)
  4. 【渝粤题库】陕西师范大学200851 微机实用技术
  5. 【渝粤题库】国家开放大学2021春1044合同法题目
  6. 内部时钟和外部时钟隔离的Σ-Δ调制器
  7. php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本
  8. js清除添加的下拉框html,Html下拉框的定义以及JS、Jquary取值、添加和移除
  9. php同时抢购 代码,浅谈PHP实现大流量下抢购方案
  10. 通信工程施工图案例分析