• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC常見數據類型轉換詳解

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    作者:程佩君 剛接觸VC編程的朋友往往對許多數據類型的轉換感到迷惑不解,本文將介紹一些常用數據類型的使用。 我們先定義一些常見類型變量借以說明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]=女俠程佩君; char temp
    作者:程佩君

    剛接觸VC編程的朋友往往對許多數據類型的轉換感到迷惑不解,本文將介紹一些常用數據類型的使用。

    我們先定義一些常見類型變量借以說明

    int i = 100;
    long l = 2001;
    float f=300.2;
    double d=12345.119;
    char username[]="女俠程佩君";
    char temp[200];
    char *buf;
    CString str;
    _variant_t v1;
    _bstr_t v2;

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


    短整型(int)
    itoa(i,temp,10);///將i轉換為字符串放入temp中,最后一個數字表示十進制
    itoa(i,temp,2); ///按二進制方式轉換
    長整型(long)
    ltoa(l,temp,10);


    二、從其它包含字符串的變量中獲取指向該字符串的指針


    CString變量
    str = "2008北京奧運";
    buf = (LPSTR)(LPCTSTR)str;
    BSTR類型的_variant_t變量
    v1 = (_bstr_t)"程序員";
    buf = _com_util::ConvertBSTRToString((_bstr_t)v1);

    三、字符串轉換為其它數據類型
    strcpy(temp,"123");

    短整型(int)
    i = atoi(temp);
    長整型(long)
    l = atol(temp);
    浮點(double)
    d = atof(temp);

    四、其它數據類型轉換到CString
    使用CString的成員函數Format來轉換,例如:


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

    五、BSTR、_bstr_t與CComBSTR


    CComBSTR、_bstr_t是對BSTR的封裝,BSTR是指向字符串的32位指針。
    char *轉換到BSTR可以這樣: BSTR b=_com_util::ConvertStringToBSTR("數據");///使用前需要加上頭文件comutil.h
    反之可以使用char *p=_com_util::ConvertBSTRToString(b);


    六、VARIANT 、_variant_t 與 COleVariant


    VARIANT的結構可以參考頭文件VC98\Include\OAIDL.H中關于結構體tagVARIANT的定義。
    對于VARIANT變量的賦值:首先給vt成員賦值,指明數據類型,再對聯合結構中相同數據類型的變量賦值,舉個例子:
    VARIANT va;
    int a=2001;
    va.vt=VT_I4;///指明整型數據
    va.lVal=a; ///賦值

    對于不馬上賦值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);進行初始化,其本質是將vt設置為VT_EMPTY,下表我們列舉vt與常用數據的對應關系:

    unsigned char bVal; VT_UI1
    short iVal; VT_I2
    long lVal;  VT_I4   
    float fltVal;  VT_R4
    double dblVal;  VT_R8   
    VARIANT_BOOL boolVal;  VT_BOOL
    SCODE scode;  VT_ERROR
    CY cyVal;  VT_CY
    DATE date;  VT_DATE
    BSTR bstrVal;  VT_BSTR
    IUnknown FAR* punkVal;  VT_UNKNOWN
    IDispatch FAR* pdispVal;  VT_DISPATCH
    SAFEARRAY FAR* parray;  VT_ARRAY|*
    unsigned char FAR* pbVal;  VT_BYREF|VT_UI1
    short FAR* piVal;  VT_BYREF|VT_I2
    long FAR* plVal;  VT_BYREF|VT_I4
    float FAR* pfltVal;  VT_BYREF|VT_R4
    double FAR* pdblVal; VT_BYREF|VT_R8
    VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
    SCODE FAR* pscode;  VT_BYREF|VT_ERROR
    CY FAR* pcyVal;  VT_BYREF|VT_CY
    DATE FAR* pdate; VT_BYREF|VT_DATE
    BSTR FAR* pbstrVal;  VT_BYREF|VT_BSTR
    IUnknown FAR* FAR* ppunkVal;  VT_BYREF|VT_UNKNOWN
    IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
    SAFEARRAY FAR* FAR* pparray;  VT_ARRAY|*
    VARIANT FAR* pvarVal;  VT_BYREF|VT_VARIANT
    void FAR* byref;  VT_BYREF


    _variant_t是VARIANT的封裝類,其賦值可以使用強制類型轉換,其構造函數會自動處理這些數據類型。
    例如:
    long l=222;
    ing i=100;
    _variant_t lVal(l);
    lVal = (long)i;


    COleVariant的使用與_variant_t的方法基本一樣,請參考如下例子:
    COleVariant v3 = "字符串", v4 = (long)1999;
    CString str =(BSTR)v3.pbstrVal;
    long i = v4.lVal;


    七、其它

    對消息的處理中我們經常需要將WPARAM或LPARAM等32位數據(DWORD)分解成兩個16位數據(WORD),例如:
    LPARAM lParam;
    WORD loValue = LOWORD(lParam);///取低16位
    WORD hiValue = HIWORD(lParam);///取高16位
    對于16位的數據(WORD)我們可以用同樣的方法分解成高低兩個8位數據(BYTE),例如:
    WORD wValue;
    BYTE loValue = LOBYTE(wValue);///取低8位
    BYTE hiValue = HIBYTE(wValue);///取高8位
    后記:本文匆匆寫成,錯誤之處在所難免,歡迎來信指正.

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>