CString、TCHAR*、char*轉換

Unicode 模式下 
CString 和 Char *相互轉換 

CString 轉 Char*


方法一: 
  CString info(_T("測試。"); 
  LPCSTR tmp; 
  USES_CONVERSION;     
  tmp = W2A( info.GetBuffer( ) ); 
方法二: 
  CString info(_T("測試。"); 
  LPSTR tmp = new char[100]; 
  wsprintfA(tmp,"%ls", info); 
  Char *轉CString 
  char buffer[]="測試"; 
  CString tmp(""); 
  USES_CONVERSION;     
  tmp = A2W( buffer );

1.傳給未分配內存的const char* (LPCTSTR)指針. 
CString cstr(asdd); 
const char* ch = (LPCTSTR)cstr; 
ch指向的地址和cstr相同。但由於使用const保證ch不會修改,所以安全.

2.傳給未分配內存的指針. 
CString cstr = "ASDDSD"; 
char *ch = cstr.GetBuffer(cstr1.GetLength() + 1); 
cstr.ReleaseBuffer(); 
//修改ch指向的值等於修改cstr裏面的值. 
//PS:用完ch後,不用delete ch,因爲這樣會破壞cstr內部空間,容易造成程序崩潰.


3.第二種用法。把CString 值賦給已分配內存的char *。 
CString cstr1 = "ASDDSD"; 
int strLength = cstr1.GetLength() + 1; 
char *pValue = new char[strLength]; 
strncpy(pValue, cstr1, strLength);


4.第三種用法.把CString 值賦給已分配內存char[]數組. 
CString cstr2 = "ASDDSD"; 
int strLength1 = cstr1.GetLength() + 1; 
char chArray[100]; 
memset(chArray,0, sizeof(bool) * 100); //將數組的垃圾內容清空. 
strncpy(chArray, cstr1, strLength1);

 

 

char*、TCHAR*轉換CString 
CString str(****) 
下面詳細寫一下其它轉換 
*********************************************************************** 
* 函數: TransCStringToTCHAR 
* 描述:將CString 轉換爲 TCHAR* 
* 日期: 
*********************************************************************** 
TCHAR* CPublic::CString2TCHAR(CString &str) 
{ 
int iLen = str.GetLength(); 
TCHAR* szRs = new TCHAR[iLen]; 
lstrcpy(szRs, str.GetBuffer(iLen)); 
str.ReleaseBuffer(); 
return szRs; 
} 
*********************************************************************** 
* 函數: THCAR2Char 
* 描述:將TCHAR* 轉換爲 char* 
*********************************************************************** 
char* CPublic::THCAR2char(TCHAR* tchStr) 
{ 
int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個字符,因此不用普通計算長度 
char* chRtn = new char[iLen+1] 
wcstombs(chRtn,tchStr,iLen+1);//轉換成功返回爲非負值 
return chRtn; 
} 
*********************************************************************** 
* 函數: CString2char 
* 描述:將CString轉換爲 char* 
*********************************************************************** 
char* CPublic::CString2char(CString &str) 
{ 
int len = str.GetLength(); 
char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的長度中漢字算一個長度 
memset(chRtn, 0, 2*len+1); 
USES_CONVERSION; 
strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer())); 
return chRtn; 
} 
*********************************************************************** 
* 函 數 名:GetAnsiString 
* 描 述:將CString(unicode)轉換爲char*(ANSI) 
* 參 數:CString &s 要轉換的CString 
* 返 回 值:返回轉換結果 
*********************************************************************** 
char* GetAnsiString(const CString &s) 
{ 
int nSize = 2*s.GetLength(); 
char *pAnsiString = new char[nSize+1]; 
wcstombs(pAnsiString, s, nSize+1); 
return pAnsiString; 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章