CString、TCHAR*、char*之间的转换函数

    技术2022-07-11  97

    CString->LPTSTR的转化可以用函数GetBuff()

    CString StrInfo="C://Windows"; LPTSTR StrTest=StrInfo.GetBuffer(20); strcpy(StrTest,"NewString"); StrInfo.ReleaseBuffer();

    MessageBox(StrInfo,"信息提示",MB_OK);

    CString->TCHAR*的转化可以用函数GetBuff()

    函数原型为:LPTSTR GetBuffer( int nMinBufLength ); CString str("CString"); TCHAR* szMsg = new TCHAR[100]; //其参数为CString字符串的长度 szMsg = str.GetBuffer(str.GetLength()); str.ReleaseBuffer(); delete []szMsg; szMsg = NULL;

    TCHAR*->CString的转化

    TCHAR szTchar[18] = L"TCHAR";   CString str;   str.Format(_T("%s"),szTchar);

    // /* *********************************************************************** * 函数: TransCStringToTCHAR * 描述:将CString 转换为 TCHAR* * 日期:2003-05-30 King *********************************************************************** */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* * 日期:2003-05-30 King *********************************************************************** */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* * 日期:2003-05-26 King *********************************************************************** */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 * 返 回 值:返回转换结果 * 日期、作者:创建日期:2003-5-30 King * 最后修改:2003-5-30 King *********************************************************************** */char* GetAnsiString(const CString &s) { int nSize = 2*s.GetLength(); char *pAnsiString = new char[nSize+1]; wcstombs(pAnsiString, s, nSize+1); return pAnsiString;

     

    /* *********************************************************************** * 函数: char2CString *********************************************************************** */

    CString  Char2CString( char* strSrc) {  int  nLen = 0;  if(strSrc)   nLen = MultiByteToWideChar(936,0,strSrc,-1,NULL,0 );

     wchar_t *  pUnicode;   pUnicode = new  wchar_t[nLen+1];   memset(pUnicode,0,(nLen+1)*sizeof(wchar_t)); 

     if(strSrc)   MultiByteToWideChar(936,0,strSrc,-1,(LPWSTR)pUnicode,nLen ); 

     CString strUnicode = _T("");

     strUnicode = pUnicode;  delete [] pUnicode;  pUnicode = NULL;  return  strUnicode;  }

     

    /* *********************************************************************** * 函数: CString2Char *********************************************************************** */

    void CString2Char( CString strSrc,char * strText) {    int dwNum = WideCharToMultiByte(936,0,strSrc,strSrc.GetLength(),NULL,0,NULL,NULL);

     char *psText;  psText = new char[dwNum +1];

     memset(psText,0,((dwNum+1)*sizeof(char)));  WideCharToMultiByte (936,0,strSrc,strSrc.GetLength(),psText,dwNum+1,NULL,NULL);

     if(strText)   memcpy(strText,psText,dwNum+1);

     delete []psText;  psText = NULL;}

    Processed: 0.009, SQL: 9