VC中類型轉換

我們先定義一些常見類型變量藉以說明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="
女俠<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />程佩君";
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_tCComBSTR


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_tVARIANT的封裝類,其賦值可以使用強制類型轉換,其構造函數會自動處理這些數據類型。

例如:
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;
七、其它

對消息的處理中我們經常需要將WPARAMLPARAM32位數據(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

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