CString、TCHAR*、char*转换

来源:互联网 发布:vue.js配合什么ui框架 编辑:程序博客网 时间:2024/06/07 22:28
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 chariTextLen = 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 chariTextLen = 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
0 0