資料類型轉換樣本

來源:互聯網
上載者:User
剛接觸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位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.