zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    79.Word Search
    78.Subsets
    77.Combinations
    75.Sort Colors
    74.Search a 2D Matrix
    73.Set Matrix Zeroes
    71.Simplify Path
    64.Minimum Path Sum
    63.Unique Paths II
    Docker 拉取 oracle 11g镜像配置
  • 原文地址:https://www.cnblogs.com/htys/p/3327956.html
Copyright © 2011-2022 走看看