MFC中char*,string和CString之间的转换
string是使用STL時必不可少的類型,所以是做工程時必須熟練掌握的;
char*是從學習C語言開始就已經(jīng)和我們形影不離的了,有許多API都是以char*作為參數(shù)輸入的。所以熟練掌握三者之間的轉(zhuǎn)換十分必要。
以下我用簡單的圖示指出三者之間的關(guān)系,并以標號對應(yīng)轉(zhuǎn)換的方法。
1 string 轉(zhuǎn)為 CString???
??CString.format("%s",string.c_str());?
2 CString 轉(zhuǎn)為 string
string str(CString.GetBuffer(str.GetLength()));
3 string 轉(zhuǎn)為 char *
char *p=string.c_str();
4 char * 轉(zhuǎn)為 string
string str(char*);
5 CString 轉(zhuǎn)為 char *
strcpy(char,CString,sizeof(char));
6 char * 轉(zhuǎn)為 CString
CString.format("%s",char*);
?CString的Format格式化方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *轉(zhuǎn)換時,要把char定義成為const char*,這樣是最安全的。
以上函數(shù)UNICODE編碼也沒問題:unicode下照用,加個_T()宏就行了,像這樣子_T("%s")
?
一、????將CString類轉(zhuǎn)換成char*(LPSTR)類型
方法一,使用強制轉(zhuǎn)換。例如:?
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成員函數(shù)
CString str = "ABCDEF";?
char *pBuf = str,GetBuffer( 0 );?
str.ReleaseBuffer();
二、?????string轉(zhuǎn)char*
string?是c++標準庫里面其中一個,封裝了對字符串的操作
把string轉(zhuǎn)換為char*?有3種方法:
1。data(),返回沒有”\0“的字符串數(shù)組?
如:
string str="abc";
char??*p=str.data();
2.c_str?返回有”\0“的字符串數(shù)組?
如:string??str="gdfd";
????char *p=str.c_str();
3 copy
比如
string??str="hello";
char p[40];
str.copy(p,5,0); //這里5,代表復(fù)制幾個字符,0代表復(fù)制的位置
*(p+5)='\0';??//要手動加上結(jié)束符
cout < < p;
三、?????字符串string轉(zhuǎn)換為其它數(shù)據(jù)類型
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*轉(zhuǎn)換為string
如果要把一個char?轉(zhuǎn)換成string,?可以使用?string s(char??*);?
五、string?轉(zhuǎn)CString??
CString.format("%s",??string.c_str());?
六、char?轉(zhuǎn)CString??
CString.format("%s", char*);?
七、?????CString -> string?
string??s(CString.GetBuffer());??
GetBuffer()后一定要ReleaseBuffer(),否則就沒有釋放緩沖區(qū)所占的空間.
八、CString互轉(zhuǎn)int
將字符轉(zhuǎn)換為整數(shù),可以使用atoi、_atoi64或atol。??
而將數(shù)字轉(zhuǎn)換為CString變量,可以使用CString的Format函數(shù)。如??
CString s;??
int i =??64;??
s.Format("%d", i)?
原文:https://blog.csdn.net/lidandan2016/article/details/90260172?
總結(jié)
以上是生活随笔為你收集整理的MFC中char*,string和CString之间的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员成长之路(转)
- 下一篇: 职场新人面试误区:我的技术好,所以你必须