CString转为string遇到的问题
来源:互联网 发布:金士顿u盘数据恢复 编辑:程序博客网 时间:2024/06/15 20:24
今天写程序遇到在MFC中获取控件上的字符时,定义了一个CString类型的变量来存放。然后需要将CString类型转为string类型,用于其他函数的使用;出现一个问题,导致我晚上整整花了四十几分钟,想死的心都有了。由于对个中字符类型不是很了解,包括c-style的字符串,c++中模板basic_string等等一系列不是很了解,尤其在涉及到宽字节和多字节时,更是雨里雾里;
这个问题,其实对于大部分初学者应该都比较头疼。于是上网搜了很多资料,方法也很多,都是我抄你你抄我的,总结了一下两点:
. 1. 用LPCTSTR: char *p = (char *p)(LPCSTR)CString; 2.用getBuffer():char *p = (char *p)CString.GetBuffer(0);
这两种办法编译倒是编译过了,但是结果p中只保存了第一个字符。
这时候调试的时候会发现p+1是空字符('/0'),p+2才是Cstring重保存的第二个字符。这就是为什么p中只保存了第一个字符的原因。在网上稍微了解了 一下,貌似与宽窄字符有关。
再进一步了解一下就是CString是UNICODE的字串,而string是ANSI的字符。他们之间转换就用到了函数WideCharToMultiByte()。
具体的转换如下:
string CString2string(CString cstr){ DWORD num = WideCharToMultiByte(CP_ACP,0,cstr,-1,NULL,0,NULL,0); char *cword; cword = (char*)calloc(num,sizeof(char)); if(cword == NULL) { free(cword); } memset(cword, 0, num*sizeof(char)); WideCharToMultiByte(CP_ACP,0, cstr, -1, cword, num,NULL,0); string ans = cword; free(cword); return ans;}
ok了,就这样。这个应该在任何情况下都ok。兄弟们就不必在这上面纠结了。
其实在找到该方法前,我自己用了一个最笨的办法就是把CString里面放的字符一个个取出来赋给一个数组,然后把字符数组转为string。这是最原始的方法,但是很简单,思路也简单,不妨试下:
CString FeatureSel;int b=FeatureSel.GetLength();char a[10];for(int i=0;i<b;i++){a[i]=FeatureSel[i];}a[b]='\0';std::string s(a);
补充:最近又看到一种方法很直接
CString zsw;
string zsw1=(CStringA)zsw;
就可以实现了,是不是很简单;
0 0
- CString转为string遇到的问题
- CString 转为 std::string
- cstring转为std::string
- 数据类型CString转为string
- Windows字符集:string转为CString、char* 转为CString、CString转为char*
- vc6.0转为vc2003遇到的问题
- ajax打印对象时,转换由java对象转为Json格式的String时遇到的Hibernate问题
- CString string char* int的转换问题!!
- VS2005中CString 转 String的问题
- CString string char* 等字符串的问题
- CString转string和char*的问题
- CString类型的字符串写入文件,所遇到的问题
- CString字符串相加中遇到的一个问题
- CString string的选择
- VS2010 CString转为char的方法
- 终于搞定CString和string之间转换的问题了
- 使用String的split遇到的问题
- vs2005下C++开发遇到的CSTring与string之间的转化
- for 循环和 foreach 循环在遍历时的区别与联系
- python发送邮件
- 说说我的HBase表设计
- 投诉山西省应县公安局非法拘禁
- Unicode和UTF-8的关系
- CString转为string遇到的问题
- 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi
- 数据结构第三章栈和队列知识结构导图
- Hibernate4二级缓存配置
- 深度优先搜索Depth-first search (DFS) for undirected graphs
- Java基础回顾(1)
- RGB与YUV格式简介
- 民院CSDN俱乐部首次会员培训活动顺利开展
- 目前交了但未AC的题目(及时更新)