字符轉換-收集

轉換類型

char            vs            wchar_t

使用函數

_makepath        _wmakepath

_fullpath            _wfullpath

_splitpath          _wsplitpath

轉換方法

MultiByteToWideChar

WideCharToMultiByte

一、其它數據類型轉換爲字符串

  • 短整型(int)


    itoa(i,temp,10);///將i轉換爲字符串放入temp中,最後一個數字表示十進制

    itoa(i,temp,2); ///按二進制方式轉換
  • 長整型(long)



    ltoa(l,temp,10);
  • 浮點數(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爲負數
  • CString變量



    str = "2008北京奧運";

    buf = (LPSTR)(LPCTSTR)str;
  • BSTR變量



    BSTR bstrValue = ::SysAllocString(L"程序員


    ");

    char * buf = _com_util::ConvertBSTRToString(bstrValue);

    SysFreeString(bstrValue);

    AfxMessageBox(buf);

    delete(buf);
  • CComBSTR變量



    CComBSTR bstrVar("test");

    char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);

    AfxMessageBox(buf);

    delete(buf);
  • _bstr_t變量



    _bstr_t類型是對BSTR的封裝


    ,因爲已經重載了=操作符,所以很容易使用




    _bstr_t bstrVar("test");

    const char *buf = bstrVar;///不要修改buf中的內容

    AfxMessageBox(buf);
  • 通用方法(針對非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);

    二、字符串轉換爲其它數據類型
    





    strcpy(temp,"123");

  • 短整型(int)



    i = atoi(temp);
  • 長整型(long)

    l = atol(temp);
  • 浮點(double)
       

    d = atof(temp);




  • CString變量

    CString name = temp;
  • BSTR變量

    BSTR bstrValue = ::SysAllocString(L"程序員");


         ...///完成對bstrValue的使用

         SysFreeString(bstrValue);



  • CComBSTR變量

    CComBSTR類型變量可以直接賦值

    CComBSTR bstrVar1("test");

    CComBSTR bstrVar2(temp);
  • _bstr_t變量

    _bstr_t類型的變量可以直接賦值

    _bstr_t bstrVar1("test");

    _bstr_t bstrVar2(temp);

三、其它數據類型轉換到CString




使用CString的成員函數Format來轉換,例如:



  • 整數(int)

    str.Format("%d",i);
  • 浮點數(float)

    str.Format("%f",i);
  • 字符串指針(char *)等已經被CString構造函數支持的數據類型可以直接賦值

    str = username;
  • 對於Format所不支持的數據類型,可以通過上面所說的關於其它數據類型轉化到char *的方法先轉到char *,然後賦值給CString變量。

四、BSTR、_bstr_t與CComBSTR





  • CComBSTR 是ATL


    對BSTR的封裝,_bstr_t是C++對BSTR的封裝,BSTR是32位指針,但並不直直指向字串的緩衝區。

    char *轉換到BSTR可以這樣:

    BSTR b=_com_util::ConvertStringToBSTR("數據");///使用前需要加上comutil.h和comsupp.lib

    SysFreeString(bstrValue);

    反之可以使用

    char *p=_com_util::ConvertBSTRToString(b);

    delete p;

    具體可以參考一,二段落裏的具體說明。

    CComBSTR與_bstr_t對大量的操作符進行了重載,可以直接進行=,!=,==等操作,所以使用非常方便。

    特別是_bstr_t,建議大家使用它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章