天天看點

MFC中char*,string和CString之間的轉換

<a target="_blank" href="http://www.cnblogs.com/maowang1991/p/3570328.html">MFC中char*,string和CString之間的轉換</a>

一、    将CString類轉換成char*(LPSTR)類型

方法一,使用強制轉換。例如: 

CString theString( "This  is a test" ); 

LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString; 

方法二,使用strcpy。例如: 

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 &lt; &lt; 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 -&gt; string 

string  s(CString.GetBuffer());  

GetBuffer()後一定要ReleaseBuffer(),否則就沒有釋放緩沖區所占的空間.

八、CString互轉int

将字元轉換為整數,可以使用atoi、_atoi64或atol。  

而将數字轉換為CString變量,可以使用CString的Format函數。如  

CString s;  

int i =  64;  

s.Format("%d", i) 

繼續閱讀