zoukankan      html  css  js  c++  java
  • C++类型转换(字符串)

    CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下的一个隐藏区域)以及一个缓冲区长度。 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。

    (1) char*转换成CString

      若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:

            char chArray[] = "Char test";
           TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)
            CString theString = chArray;
            theString.Format(_T("%s"), chArray);
            theString = p;

    (2) CString转换成char*

      若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

      方法一,使用强制转换。例如:

          CString theString( (_T("Char test "));
           LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

      方法二,使用strcpy。例如:

          CString theString( (_T("Char test "));
          LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
           _tcscpy(lpsz, theString);

      需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

      方法三,使用CString::GetBuffer。

           如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:
          CString s(_T("Char test "));
           LPTSTR p = s.GetBuffer();

          LPTSTR dot = strchr(p, ''.'');

            // 在这里添加使用p的代码

            if(p != NULL)

           *p = _T('');
            s.ReleaseBuffer();                     // 使用完后及时释放,以便能使用其它的CString成员函数

           在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

    ----------------------------------------------------

    其它数据类型转换为字符串

    1。短整型(int) 
    itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 
    itoa(i,temp,2); ///按二进制方式转换 
    2。长整型(long) 
    ltoa(l,temp,10); 
    3。浮点数(float,double) 
    用fcvt可以完成转换,这是MSDN中的例子: 
    int decimal, sign; 
    char *buffer; 
    double source = 3.1415926535; 
    buffer = _fcvt( source, 7, &decimal, &sign ); 
    运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 
    decimal表示小数点的位置,sign表示符号:0为正数,1为负数 
    4。CString变量 
    str = "2008北京奥运"; 
    buf = (LPSTR)(LPCTSTR)str; 
    5。BSTR变量 
    BSTR bstrValue = ::SysAllocString(L"程序员"); 
    char * buf = _com_util::ConvertBSTRToString(bstrValue); 
    SysFreeString(bstrValue); 
    AfxMessageBox(buf); 
    delete(buf); 
    6。CComBSTR变量 
    CComBSTR bstrVar("test"); 
    char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); 
    AfxMessageBox(buf); 
    delete(buf);

    7。_bstr_t变量 
    _bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用 
    _bstr_t bstrVar("test"); 
    const char *buf = bstrVar;///不要修改buf中的内容 
    AfxMessageBox(buf);


    8。通用方法(针对非COM数据类型) 
    用sprintf完成转换 
    char buffer[200]; 
    char c = '1'; 
    int i = 35; 
    long j = 1000; 
    float f = 1.7320534f; 
    sprintf( buffer, "%c",c); 
    sprintf( buffer, "%d",i); 
    sprintf( buffer, "%d",j); 
    sprintf( buffer, "%f",f);

  • 相关阅读:
    MySQL——视图/触发器/事务/存储过程/函数/流程控制
    python连接MySQL/redis/mongoDB数据库的简单整理
    docker安装和使用
    【Python】Django2.0集成Celery4.1详解
    django-haystack全文检索详细教程
    ubuntu16.04安装FastDFS-5.08
    redis之django-redis
    uva 1152 4 Values whose Sum is 0
    2015暑假acm短训小结
    Uva 12569 Planning mobile robot on Tree (EASY Version)
  • 原文地址:https://www.cnblogs.com/zhixing/p/3105735.html
Copyright © 2011-2022 走看看