CString、TCHAR*、char*轉換

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; 
} 

/* 
*********************************************************************** 
* 函數: TCHAR2Char 
* 描述:將TCHAR* 轉換爲 char* 
* 日期:
*********************************************************************** 
*/ 
char* TCHAR2char(TCHAR* tchStr) 
{ 
int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個字符,因此不用普通計算長度 
char* chRtn = new char[iLen+1] 
wcstombs(chRtn,tchStr,iLen+1);//轉換成功返回爲非負值 
return chRtn; 
} 

/*
*********************************************************************** 
* 函數: char2tchar
* 描述:將 char* 轉換爲 TCHAR*
* 日期:
*********************************************************************** 
*/ 
TCHAR *char2tchar(char *str)
{
int iLen = strlen(str);
TCHAR *chRtn = new TCHAR[iLen+1];
mbstowcs(chRtn, str, 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; 
} 
//參考 
/////////////////////// 
//Pocket PC上的UNICODE和ANSI字符串 

//By Vassili Philippov, September 26, 2001. 

//楊方思歧 譯 
//////////////////////// 
/* 
*********************************************************************** 
* 函 數 名: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; 
} 

//////////////////////////////////////////////////////////////////////////////////////////////
     WideCharToMultiByte和MultiByteToWideChar函數的用法

支持Unicode編碼,需要多字節與寬字節之間的相互轉換

WideCharToMultiByte的代碼頁用來標記與新轉換的字符串相關的代碼頁。

MultiByteToWideChar的代碼頁用來標記與一個多字節字符串相關的代碼頁。

常用的代碼頁由CP_ACP和CP_UTF8兩個。

使用CP_ACP代碼頁就實現了ANSI與Unicode之間的轉換。

使用CP_UTF8代碼頁就實現了UTF-8與Unicode之間的轉換。


wstring AnsiToUnicode(( const string& str )
{
int   len = 0;

len = str.length();

int   unicodeLen = ::MultiByteToWideChar( CP_ACP, 0, str.c_str(),-1,NULL,0 );  

wchar_t *   pUnicode;  

pUnicode = new   wchar_t[unicodeLen+1];  

memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));  

::MultiByteToWideChar( CP_ACP,0, str.c_str(),-1, (LPWSTR)pUnicode, unicodeLen );  

wstring   rt;  
rt = ( wchar_t* )pUnicode;
delete   pUnicode; 
return   rt;  

}

string UnicodeToAnsi( const wstring& str )
{

char*      pElementText;
int     iTextLen;

// wide char to multi char

iTextLen = WideCharToMultiByte( CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL );

pElementText = new char[iTextLen + 1];

memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );

::WideCharToMultiByte( CP_ACP, 0, str.c_str(), -1, pElementText,iTextLen,NULL,NULL );

string strText;

strText = pElementText;

delete[] pElementText;


return strText;

}

wstring UTF8ToUnicode(( const string& str )
{
int   len = 0;

len = str.length();

int   unicodeLen = ::MultiByteToWideChar( CP_UTF8, 0, str.c_str(),-1,NULL,0 );  

wchar_t *   pUnicode;  

pUnicode = new   wchar_t[unicodeLen+1];  

memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));  

::MultiByteToWideChar( CP_UTF8,0, str.c_str(),-1, (LPWSTR)pUnicode, unicodeLen );  

wstring   rt;  
rt = ( wchar_t* )pUnicode;
delete   pUnicode; 
return   rt;  

}

string UnicodeToUTF8( const wstring& str )
{

char*      pElementText;
int     iTextLen;

// wide char to multi char

iTextLen = WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, NULL, 0, NULL, NULL );

pElementText = new char[iTextLen + 1];

memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );

::WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, pElementText,iTextLen,NULL,NULL );

string strText;

strText = pElementText;

delete[] pElementText;

return strText;

} 

轉載地址:http://blog.csdn.net/m372897500/article/details/17120953
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章