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之间的转换相关推荐

  1. 转载:int char* float与CString 之间的转换

    <script type="text/javascript" src="http://blogger.org.cn/blog/inc/main.js"&g ...

  2. BSTR、char* 和 CString 之间的转换 (转)

    BSTR.char* 和 CString 之间的转换 (1) char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行.例如: c ...

  3. Timestamp、String、Date之间的转换

    2019独角兽企业重金招聘Python工程师标准>>> 用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时 ...

  4. string与byte[]之间的转换

    在使用.NET加密类的时候,会经常用到string与byte[]之间的转换. 首先引用System.Text命名空间,然后 UnicodeEncoding unicode=new UnicodeEnc ...

  5. MFC中char*与CString的互相转换

    CString->char* CString str = _T("1234"); USES_CONVERSION; char* p = T2A(str.GetBuffer(0 ...

  6. C++中std::string与C-String字符数组的互相转换

    C语言中只有字符数组这一说法,没有C++专门封装的字符串类std::string.而字符数组C-String以\0作为结束符.std::string其实还是存储了C-String这个指针,只不过不同的 ...

  7. C# string 和byte[]之间的转换

    c#将string和byte数组之间互相转换   如下方法将字符串转换为byte数组,使用System.Buffer.BlockCopy方法. static byte[] GetBytes(strin ...

  8. C++排雷:19.过滤英文和中文标点符号,string与wstring之间的转换

    想要过滤一个文本中的标点符号. 对英文标点符号可以使用cctype中的ispunct方法来识别 而对于中文标点符号,则需要一定的转换: C++用string来处理字符串. string是窄字符串ASC ...

  9. Java对于字符串的处理【String和int之间的转换、字符串拼接、字符串获取长度、字符串大小写转换、字符串去空格、字符串分割、字符串替换、字符串提取、字符串比较、字符串查找】

    文章目录 String字符串 和 整型int 的相互转换 String转化为int int 转换为 String 字符串拼接 使用连接运算符 "+" 使用 concat() 方法 ...

最新文章

  1. CryEngine最新版发布,支持Vulkan API
  2. 第四章:2.串 -- 串的模式匹配算法(KMP)
  3. 生鲜水产品牌“仙泉湖”获和智4000万元投资
  4. 数据结构期末考试题目---笔记(SYSU)
  5. 程序员过关斩将--从每秒6000写请求谈起
  6. 【软件开发底层知识修炼】五 gcc-C语言编译器
  7. TFS下的源代码控制
  8. 电商价格战 谁才是最大受益者
  9. iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)
  10. linux运维常用命令大全150条
  11. SQLServer导入Excel格式数据
  12. 黑客攻防技术宝典浏览器实战篇
  13. 工程施工工地进度监控带天气经纬度相机(监理日志不再难写)
  14. powerdesigner中cmd模型中多对多_[进行中]美的多多进宝日
  15. 5G无线技术基础自学系列 | 大规模天线阵列
  16. 《孙子兵法与经理人统帅之道》读后感
  17. Linux 平台上的软件包管理
  18. 解决启动IIS发生意外错误 0x8ffe2740
  19. 【hadoop权威指南第四版】第三章hadoop分布式文件系统【笔记+代码】
  20. S32K144调试记录(二)

热门文章

  1. 文本编辑器查看 cprintf颜色_airWriter for mac(文本编辑软件)
  2. android 访问权限,Android 使用情况访问权限
  3. python bool类型return_Python bool()函数可以为无效参数引发异常吗?
  4. html表格美化代码,分享:记录一次使用纯CSS美化table表格的代码
  5. html整个项目怎么导出来,怎样将jquery导入web项目中?
  6. java怎么插入oracle数据库timenstamp,Sybase数据库技术,数据库恢复专家
  7. 谁说PCB布线不能走直角。。。
  8. 什么是编译器,什么是集成开发环境?一文讲明白
  9. 手环是如何测试人体健康数据?
  10. linux系统下c语言编程的,Linux操作系统下C语言编程从零开始