MFC中char*,string和CString之间的转换
string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;
char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。
以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。
1 string 转为 CString
CString.format("%s",string.c_str());
2 CString 转为 string
string str(CString.GetBuffer(str.GetLength()));
3 string 转为 char *
char *p=string.c_str();
4 char * 转为 string
string str(char*);
5 CString 转为 char *
strcpy(char,CString,sizeof(char));
6 char * 转为 CString
CString.format("%s",char*);
CString的Format格式化方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。
以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T("%s")
一、 将CString类转换成char*(LPSTR)类型
方法一,使用强制转换。例如:
CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
方法二,使用strcpy。例如:
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
方法三,使用CString::GetBuffer。例如:
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完后及时释放,以便能使用其它的CString成员函数
CString str = "ABCDEF";
char *pBuf = str,GetBuffer( 0 );
str.ReleaseBuffer();
二、 string转char*
string 是c++标准库里面其中一个,封装了对字符串的操作
把string转换为char* 有3种方法:
1。data(),返回没有”\0“的字符串数组
如:
string str="abc";
char *p=str.data();
2.c_str 返回有”\0“的字符串数组
如:string str="gdfd";
char *p=str.c_str();
3 copy
比如
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout < < p;
三、 字符串string转换为其它数据类型
temp="123456";
1)短整型(int)
i = atoi(temp);
2)长整型(long)
l = atol(temp);
3)浮点(double)
d = atof(temp);
string s; d= atof(s.c_str());
4)BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
...///完成对bstrValue的使用
SysFreeString(bstrValue);
5)CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTR bstrVar1("test");
CComBSTR bstrVar2(temp);
6)_bstr_t变量
_bstr_t类型的变量可以直接赋值
_bstr_t bstrVar1("test");
_bstr_t bstrVar2(temp);
四、 Char*转换为string
如果要把一个char 转换成string, 可以使用 string s(char *);
五、string 转CString
CString.format("%s", string.c_str());
六、char 转CString
CString.format("%s", char*);
七、 CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
八、CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format("%d", i)
原文:https://blog.csdn.net/lidandan2016/article/details/90260172
MFC中char*,string和CString之间的转换相关推荐
- 转载:int char* float与CString 之间的转换
<script type="text/javascript" src="http://blogger.org.cn/blog/inc/main.js"&g ...
- BSTR、char* 和 CString 之间的转换 (转)
BSTR.char* 和 CString 之间的转换 (1) char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行.例如: c ...
- Timestamp、String、Date之间的转换
2019独角兽企业重金招聘Python工程师标准>>> 用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时 ...
- string与byte[]之间的转换
在使用.NET加密类的时候,会经常用到string与byte[]之间的转换. 首先引用System.Text命名空间,然后 UnicodeEncoding unicode=new UnicodeEnc ...
- MFC中char*与CString的互相转换
CString->char* CString str = _T("1234"); USES_CONVERSION; char* p = T2A(str.GetBuffer(0 ...
- C++中std::string与C-String字符数组的互相转换
C语言中只有字符数组这一说法,没有C++专门封装的字符串类std::string.而字符数组C-String以\0作为结束符.std::string其实还是存储了C-String这个指针,只不过不同的 ...
- C# string 和byte[]之间的转换
c#将string和byte数组之间互相转换 如下方法将字符串转换为byte数组,使用System.Buffer.BlockCopy方法. static byte[] GetBytes(strin ...
- C++排雷:19.过滤英文和中文标点符号,string与wstring之间的转换
想要过滤一个文本中的标点符号. 对英文标点符号可以使用cctype中的ispunct方法来识别 而对于中文标点符号,则需要一定的转换: C++用string来处理字符串. string是窄字符串ASC ...
- Java对于字符串的处理【String和int之间的转换、字符串拼接、字符串获取长度、字符串大小写转换、字符串去空格、字符串分割、字符串替换、字符串提取、字符串比较、字符串查找】
文章目录 String字符串 和 整型int 的相互转换 String转化为int int 转换为 String 字符串拼接 使用连接运算符 "+" 使用 concat() 方法 ...
最新文章
- CryEngine最新版发布,支持Vulkan API
- 第四章:2.串 -- 串的模式匹配算法(KMP)
- 生鲜水产品牌“仙泉湖”获和智4000万元投资
- 数据结构期末考试题目---笔记(SYSU)
- 程序员过关斩将--从每秒6000写请求谈起
- 【软件开发底层知识修炼】五 gcc-C语言编译器
- TFS下的源代码控制
- 电商价格战 谁才是最大受益者
- iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)
- linux运维常用命令大全150条
- SQLServer导入Excel格式数据
- 黑客攻防技术宝典浏览器实战篇
- 工程施工工地进度监控带天气经纬度相机(监理日志不再难写)
- powerdesigner中cmd模型中多对多_[进行中]美的多多进宝日
- 5G无线技术基础自学系列 | 大规模天线阵列
- 《孙子兵法与经理人统帅之道》读后感
- Linux 平台上的软件包管理
- 解决启动IIS发生意外错误 0x8ffe2740
- 【hadoop权威指南第四版】第三章hadoop分布式文件系统【笔记+代码】
- S32K144调试记录(二)
热门文章
- 文本编辑器查看 cprintf颜色_airWriter for mac(文本编辑软件)
- android 访问权限,Android 使用情况访问权限
- python bool类型return_Python bool()函数可以为无效参数引发异常吗?
- html表格美化代码,分享:记录一次使用纯CSS美化table表格的代码
- html整个项目怎么导出来,怎样将jquery导入web项目中?
- java怎么插入oracle数据库timenstamp,Sybase数据库技术,数据库恢复专家
- 谁说PCB布线不能走直角。。。
- 什么是编译器,什么是集成开发环境?一文讲明白
- 手环是如何测试人体健康数据?
- linux系统下c语言编程的,Linux操作系统下C语言编程从零开始