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) 

 

  • 10
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
随笔 - 764 文章 - 3 评论 - 196 CString,string,char*之间转换(转) 这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间转换十分必要。 以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。 1 string to CString CString.format("%s",string.c_str()); 2 CString to string string str(CString.GetBuffer(str.GetLength())); 3 string to char * char *p=string.c_str(); 4 char * to string string str(char*); 5 CString to char * strcpy(char,CString,sizeof(char)); 6 char * to CString CString.format("%s",char*); CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。 以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T("%s") 补充: CString 可能是 CStringW/CStringA,在与 string 转换时,如果是 CStringW,还涉及编码转换问题。下面以 CStringA 来说明。 1 string to CString CString.format("%s",string.c_str()); CStringA = string.c_str() 就可以了 2 CString to string string str(CString.GetBuffer(str.GetLength())); GetBuffer 有参数的话,可能导致内部的分配空间动作,要进行后续 ReleaseBuffer 操作。 string = CStringA string = CStringA.GetBuffer(); 3 string to char * char *p=string.c_str(); 4 char * to string string str(char*); 5 CString to char * strcpy(char *,CString,sizeof(char)); 按照 3 风格,这里应该 char * = CStringA; 或者 char *p = CStringA.GetBuffer(); 6 char * to CString CStringA = char * 就可以了
MFC(Microsoft Foundation Classes),可以使用一些方法将CString类型无损地转换string类型。下面介绍两种常用的转换方法: 1. CString转换string(使用CStringA): - 首先,将CString对象转换为CStringA对象,即将宽字符编码(Unicode)转换为多字节编码。 - 然后,使用CStringA对象的GetString()函数获取const char*指针。 - 最后,将获取到的指针传递给string类的构造函数,以创建一个新的string对象。 ```cpp #include <iostream> #include <string> #include <afx.h> int main() { CString cstr = _T("Hello, CString!"); CStringA cstrA(cstr); const char* buffer = cstrA.GetString(); std::string str(buffer); std::cout << str << std::endl; return 0; } ``` 2. CString转换string(使用CT2CA): - 首先,使用CT2CA宏将CString对象转换为const char*指针,即将宽字符编码(Unicode)转换为多字节编码。 - 然后,将获取到的指针传递给string类的构造函数,以创建一个新的string对象。 ```cpp #include <iostream> #include <string> #include <afx.h> int main() { CString cstr = _T("Hello, CString!"); const char* buffer = CT2CA(cstr); std::string str(buffer); std::cout << str << std::endl; return 0; } ``` 这两种方法可以将MFC的CString类型无损地转换string类型,并保留其的数据。根据你的具体情况和使用的字符集,可以选择适合的方法进行转换。 希望这些示例能够帮助你进行MFC的CStringstring转换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值