zoukankan      html  css  js  c++  java
  • CString、TCHAR*、char*转换

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

    /* 
    CString、TCHAR*、char*转换

    *********************************************************************** 
    * 函数: 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; 
    }

    转自:http://www.gengjudi.com/Article/2/314/html/1252.html


    char szA[100];             //An ANSI string buffer
    WCHAR szW[100];            //A Unicode string buffer

    //Normal sprintf:all strings are ANSI
    sprintf(szA, "%s","ANSI Str");

    //Converts Unicode string to ANSI
    sprintf(szA,"%S",L"Unicode Str");

    //Normal swprintf:all strings are Unicode
    swprintf(szW,L"%s",L"Unicode Str");

    //Converts ANSI string to Unicode
    swprintf(szW,L"%S", "ANSI Str");

     

    Unicode 模式下
    CString 和 Char *相互转换

    CString 转 Char*


    方法一:
      CString info(_T("测试。");
      LPCSTR tmp;
      USES_CONVERSION;    
      tmp = W2A( info.GetBuffer( ) );
    方法二:
      CString info(_T("测试。");
      LPSTR tmp = new char[100];
      wsprintfA(tmp,"%ls", info);
      Char *转CString
      char buffer[]="测试";
      CString tmp("");
      USES_CONVERSION;    
      tmp = A2W( buffer );

    1.传给未分配内存的const char* (LPCTSTR)指针.
    CString cstr(asdd);
    const char* ch = (LPCTSTR)cstr;
    ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全.

    2.传给未分配内存的指针.
    CString cstr = "ASDDSD";
    char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
    cstr.ReleaseBuffer();
    //修改ch指向的值等于修改cstr里面的值.
    //PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.


    3.第二种用法。把CString 值赋给已分配内存的char *。
    CString cstr1 = "ASDDSD";
    int strLength = cstr1.GetLength() + 1;
    char *pValue = new char[strLength];
    strncpy(pValue, cstr1, strLength);


    4.第三种用法.把CString 值赋给已分配内存char[]数组.
    CString cstr2 = "ASDDSD";
    int strLength1 = cstr1.GetLength() + 1;
    char chArray[100];
    memset(chArray,0, sizeof(bool) * 100); //将数组的垃圾内容清空.
    strncpy(chArray, cstr1, strLength1);

  • 相关阅读:
    multilabel-multiclass classifier
    关于zabbix _get返回Could not attach to pid的问题
    python导出环境依赖到req,txt文件中
    inode满的解决方法
    搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
    SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
    万万没想到,JVM内存区域的面试题也可以问的这么难?
    万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..
    npm私服verdaccio报sha错误的解决方案
    配置SQL Server 2016无域AlwaysOn(转)
  • 原文地址:https://www.cnblogs.com/xchangli/p/2445750.html
Copyright © 2011-2022 走看看