zoukankan      html  css  js  c++  java
  • CString和string的转换

    CString和string的转换

    //从CString转换到string
    CString str1 = "ABC";
    string str2 = str1.GetBuffer();
    
    //从string转换到CString
    string str1 = "ABC";
    CString str2 = str1.c_str();

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

    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;
    }
  • 相关阅读:
    单调栈
    单调队列
    线段树
    树状数组
    KMP模式匹配
    二分图最大匹配
    celery发送短信接口
    celery配置与基本使用
    celery介绍
    短信验证接口
  • 原文地址:https://www.cnblogs.com/rosesmall/p/14839095.html
Copyright © 2011-2022 走看看