C++数据格式转换

C++数据格式转换

1.CString与string

CString->std::string 例子:

CString strMfc=“test“;
std::string strStl;
strStl=strMfc.GetBuffer(0);

std::string->CString  例子:

CString strMfcstd::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 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);

猜你喜欢

转载自blog.csdn.net/lee_ham/article/details/81778529