char*、TCHAR*轉(zhuǎn)換CString CString str(****) 下面詳細(xì)寫一下其它轉(zhuǎn)換 ////////////////////////////// /* *********************************************************************** * 函數(shù): TransCStringToTCHAR * 描述:將CString 轉(zhuǎn)換為 TCHAR* * 日期: *********************************************************************** */ TCHAR* CPublic::CString2TCHAR(CString &str) { int iLen = str.GetLength(); TCHAR* szRs = new TCHAR[iLen]; lstrcpy(szRs, str.GetBuffer(iLen)); str.ReleaseBuffer(); return szRs; } /* *********************************************************************** * 函數(shù): TCHAR2Char * 描述:將TCHAR* 轉(zhuǎn)換為 char* * 日期: *********************************************************************** */ char* TCHAR2char(TCHAR* tchStr) { int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個(gè)字符,因此不用普通計(jì)算長(zhǎng)度 char* chRtn = new char[iLen+1] wcstombs(chRtn,tchStr,iLen+1);//轉(zhuǎn)換成功返回為非負(fù)值 return chRtn; } /* *********************************************************************** * 函數(shù): char2tchar * 描述:將 char* 轉(zhuǎn)換為 TCHAR* * 日期: *********************************************************************** */ TCHAR *char2tchar(char *str) { int iLen = strlen(str); TCHAR *chRtn = new TCHAR[iLen+1]; mbstowcs(chRtn, str, iLen+1); return chRtn; } /* *********************************************************************** * 函數(shù): CString2char * 描述:將CString轉(zhuǎn)換為 char* * 日期: *********************************************************************** */ char* CPublic::CString2char(CString &str) { int len = str.GetLength(); char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的長(zhǎng)度中漢字算一個(gè)長(zhǎng)度 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. //楊方思歧 譯 //////////////////////// /* *********************************************************************** * 函 數(shù) 名:GetAnsiString * 描 述:將CString(unicode)轉(zhuǎn)換為char*(ANSI) * 參 數(shù):CString &s 要轉(zhuǎn)換的CString * 返 回 值:返回轉(zhuǎn)換結(jié)果 * 創(chuàng)建日期: * 最后修改: *********************************************************************** */ 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函數(shù)的用法 支持Unicode編碼,需要多字節(jié)與寬字節(jié)之間的相互轉(zhuǎn)換 WideCharToMultiByte的代碼頁(yè)用來(lái)標(biāo)記與新轉(zhuǎn)換的字符串相關(guān)的代碼頁(yè)。 MultiByteToWideChar的代碼頁(yè)用來(lái)標(biāo)記與一個(gè)多字節(jié)字符串相關(guān)的代碼頁(yè)。 常用的代碼頁(yè)由CP_ACP和CP_UTF8兩個(gè)。 使用CP_ACP代碼頁(yè)就實(shí)現(xiàn)了ANSI與Unicode之間的轉(zhuǎn)換。 使用CP_UTF8代碼頁(yè)就實(shí)現(xiàn)了UTF-8與Unicode之間的轉(zhuǎn)換。 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; } |
|