C++数据格式转换
1.CString与string
CString->std::string 例子:
CString strMfc=“test“;
std::string strStl;
strStl=strMfc.GetBuffer(0);
std::string->CString 例子:
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
2.CString是未定义的标识符
#include<afx.h>
3.string转char*
string str="adcd";
char *p=(char*)str.c_str();
string str="abc";
char *p=str.data();
4.所以CString和char*就很像咯?
5.Char*转int
使用atoi()函数
class Solution
{
public:
int myAtoi(char* ch)
{
return atoi(ch);
}
};
使用char类型减去’0’的方法实现
class Solution
{
public:
int myAtoi(char* ch)
{
int sum = 0;
int i;
//若字符第一个负号
if(ch[0] == '-')
{
i = 1;
}
else
{
i = 0;
}
while(ch[i])
{
//char类型转换成int类型的计算方法
sum = sum * 10 + (ch[i] - '0');
i++;
}
if(ch[0] == '-')
{
return -sum;
}
else
{
return sum;
}
}
};
6.LPSTR LPCSTR LPTSTR LPCTSTR
LPSTR:指向一个字符串的32位指针,每个字符占1个字节。
LPCSTR:指向一个常量字符串的32位指针,每个字符占1个字节。
LPTSTR:指向一个字符串的32位指针,每个字符可能占1个字节或2个字节。
LPCTSTR:指向一个常量字符串的32位指针,每个字符可能占1个字节或2个字节。
7._T L
L表示字符串资源采用Unicode编码方式
wchar_t Str[]=L"Hello World!"; //每个字符都用2个字节来存储
_T是一个适配宏。当定义了_UNICODE时,_T和L相同;否则,_T的字符串采用ANSI编码方式。
LPTSTR lptStr=new TCHAR[32];
TCHAR* szBuf=_T("Hello");
以上两个语句,无论是在ANSI编码方式,还是在Unicode编码方式下都是正确的。
8.无法从“const char ”转换为“char ”
指向const的指针不能被赋给指向非const的指针,所以应该用strcpy,也就是另开一块内存,把字符一个个复制过去
const char *expr = “goodidea”;
char *buf = new char[strlen(expr)+1];
strcpy(buf, expr);
strcpy定义。
char * strcpy ( char * destination, const char * source );
从定义我们可以看到,第二个参数为const char*类型。char 可以赋给const char .
9.C++ string转int,string转double,string转long,int转string,double转string…
to_string;atoi;atol;atod;atof…
voidtestTypeConvert()
{
//int --> string
inti = 5;
string s = to_string(i);
cout << s << endl;
//double --> string
doubled = 3.14;
cout << to_string(d) << endl;
//long --> string
longl = 123234567;
cout << to_string(l) << endl;
//char --> string
charc = 'a';
cout << to_string(c) << endl; //自动转换成int类型的参数
//char --> string
string cStr; cStr += c;
cout << cStr << endl;
s = "123.257";
//string --> int;
cout << stoi(s) << endl;
//string --> int
cout << stol(s) << endl;
//string --> float
cout << stof(s) << endl;
//string --> doubel
cout << stod(s) << endl;
}
10.CString转int、double、long、char*…
_ttoi;_ttod;_ttol…
//CString转int
CString cstr_int = L"12345";
int result_int = _ttoi(cstr_int);
//CString转double
CString cstr_double = L"123.45";
double result_double = _ttof(cstr_double);
//CString转long
CString cstr_long = L"1234567890";
double result_long = _ttol(cstr_long);
//CString转long long
CString cstr_llong = L"12345678901234567890";
double result_llong = _ttoll(cstr_llong);
CString<->char*
//char*->CString
char* psz = "Test";
CString str(psz);
CString str = psz;
//CString->char*
//使用强制类型转换将CString转为LPCTSTR
CString str("Test");
LPCTSTR pStr = str;
//使用CString的GetBuffer函数,在使用CString对象的其他的任何成员之前必须调用ReleaseBuffer释放缓冲区。
CString str("Test");
LPCTSTR pStr = str.GetBuffer(0);