CString,string,char*數據類型之間的轉換

 CString,string,char*之間的轉換(轉)

這三種類型各有各的優點,比如CString比較靈活,是基於MFC常用的類型,安全性也最高,但可移植性最差。string是使用STL時必不可少的類型,所以是做工程時必須熟練掌握的;char*是從學習C語言開始就已經和我們形影不離的了,有許多API都是以char*作爲參數輸入的。所以熟練掌握三者之間的轉換十分必要。

以下我用簡單的圖示指出三者之間的關係,並以標號對應轉換的方法。

1 string to CString   

  CString.format("%s",string.c_str()); 

2 CString to string

string str(CString.GetBuffer(str.GetLength()));

3 string to char *

char *p=string.c_str();

4 char * to string

string str(char*);

5 CString to char *

strcpy(char,CString,sizeof(char));

6 char * to CString

CString.format("%s",char*);

 CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *轉換時,要把char定義成爲const char*,這樣是最安全的。
 
以上函數UNICODE編碼也沒問題:unicode下照用,加個_T()宏就行了,像這樣子_T("%s")
 
 
補充:
CString 可能是 CStringW/CStringA,在與 string 轉換時,如果是 CStringW,還涉及編碼轉換問題。下面以 CStringA 來說明。
 
1 string to CString  

CString.format("%s",string.c_str());
 
CStringA = string.c_str() 就可以了

 
2 CString to string

string str(CString.GetBuffer(str.GetLength()));
 
GetBuffer 有參數的話,可能導致內部的分配空間動作,要進行後續 ReleaseBuffer 操作。

string = CStringA

string = CStringA.GetBuffer();

3 string to char *

char *p=string.c_str();

4 char * to string

string str(char*);

5 CString to char *

strcpy(char *,CString,sizeof(char));

按照 3 風格,這裏應該 char *  = CStringA; 或者 char *p = CStringA.GetBuffer();
 
6 char * to CString

CStringA = char * 就可以了

**************************************************************************
string與int 互轉
to_string(std::atoi(data_result[0][0].c_str()) / BUF_LEN_1M)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章