CString、TCHAR*、char*转换

    xiaoxiao2025-06-20  4

    CString、TCHAR*、char*转换  

    2012-05-22 18:47:49|  分类: C++|举报|字号 订阅

           

      下载LOFTER 我的照片书  |

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

    转载请注明原文地址: https://ju.6miu.com/read-1300145.html
    最新回复(0)