C++中CString string char* char 之间的字符转换(多种方法)
首先解释下三者的含义
CString是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作(适用于MFC框架),使得MFC在做字符串操作的时候方便了很多。需要包含头文件#include
C++是字符串,功能比较强大。要想使用标准C++中string类,必须要包含#include
以下方法来进行转换:
//CharConvert.cpp:定义控制台应用程序的入口点。 // #include"stdafx.h" #include#include #include usingnamespacestd; int_tmain(intargc,_TCHAR*argv[]) { //此方法适用于“多字节”否则会出现'strcpy':cannotconvertparameter2from'unsignedshort*'to'constchar*' /*CStringstr("Hellozzu"); cout<<"theCStringis"< 同时需要注意的是,我们在平成写程序时,最好搞清我们的编译环境中的编码方式,不同的编码方式可以会导致一些字符转换失败,当我们编程开始,就要想好在哪个编码方式下进行,以免最后出现换编码方式了,代码却出现很多错误(很让人头疼),比如sqlite数据库中的中文字符乱码问题就是由于编码方式和数据库中默认的编码方式不一致。这点在我们写程序时一定谨记。
MFC中char*,string和CString之间的转换补充
一、 将CString类转换成char*(LPSTR)类型
方法一,使用强制转换。例如:
CStringtheString("This isatest");
LPTSTRlpsz=(LPTSTR)(LPCTSTR)theString;方法二,使用strcpy。例如:
CStringtheString("This isatest");
LPTSTRlpsz=newTCHAR[theString.GetLength()+1];
_tcscpy(lpsz,theString);方法三,使用CString::GetBuffer。例如:
CStrings(_T("Thisisa test"));
LPTSTRp=s.GetBuffer();
//在这里添加使用p的代码
if(p!=NULL)*p= _T('\0');
s.ReleaseBuffer();
//使用完后及时释放,以便能使用其它的CString成员函数CStringstr="ABCDEF";
char*pBuf=str,GetBuffer(0);
str.ReleaseBuffer();二、 string转char*
string是c++标准库里面其中一个,封装了对字符串的操作
把string转换为char*有3种方法:
1。data(),返回没有”\0“的字符串数组
如:
stringstr="abc";
char *p=str.data();
2.c_str返回有”\0“的字符串数组
如:string str="gdfd";
char*p=str.c_str();
3copy
比如
string str="hello";
charp[40];
str.copy(p,5,0);//这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout<
三、 字符串string转换为其它数据类型
temp="123456";
1)短整型(int)
i= atoi(temp);
2)长整型(long)
l= atol(temp);
3)浮点(double)
d= atof(temp);
strings;d=atof(s.c_str());
4)BSTR变量
BSTRbstrValue= ::SysAllocString(L"程序员");
...///完成对bstrValue的使用
SysFreeString(bstrValue);
5)CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTR bstrVar1("test");
CComBSTRbstrVar2(temp);
6)_bstr_t变量
_bstr_t类型的变量可以直接赋值
_bstr_t bstrVar1("test");
_bstr_tbstrVar2(temp);四、 Char*转换为string
如果要把一个char转换成string,可以使用strings(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函数。如
CStrings; inti=64; s.Format("%d",i)