VC++数据类型转换大全Word下载.docx
- 文档编号:17873328
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:18
- 大小:24.16KB
VC++数据类型转换大全Word下载.docx
《VC++数据类型转换大全Word下载.docx》由会员分享,可在线阅读,更多相关《VC++数据类型转换大全Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
浮点数(float,double)
用fcvt可以完成转换,这是MSDN中的例子:
decimal,
sign;
2.char
*buffer;
3.double
source
3.1415926535;
4.buffer
_fcvt(
source,
7,
&
sign
);
intdecimal,sign;
char*buffer;
doublesource=3.1415926535;
buffer=_fcvt(source,7,&
decimal,&
sign);
运行结果:
source:
3.1415926535buffer:
'
31415927'
decimal:
1sign:
0
decimal表示小数点的位置,sign表示符号:
0为正数,1为负数
CString变量
1.str
"
2008北京奥运"
2.buf
(LPSTR)(LPCTSTR)str;
str="
buf=(LPSTR)(LPCTSTR)str;
BSTR变量
1.BSTR
bstrValue
:
SysAllocString(L"
程序员"
*
buf
_com_util:
ConvertBSTRToString(bstrValue);
3.SysFreeString(bstrValue);
4.AfxMessageBox(buf);
5.delete(buf);
BSTRbstrValue=:
char*buf=_com_util:
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf);
CComBSTR变量
1.CComBSTR
bstrVar("
test"
*buf
ConvertBSTRToString(bstrVar.m_str);
3.AfxMessageBox(buf);
4.delete(buf);
CComBSTRbstrVar("
char*buf=_com_util:
_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
1._bstr_t
2.const
char
bstrVar;
///不要修改buf中的内容
_bstr_tbstrVar("
constchar*buf=bstrVar;
///不要修改buf中的内容
通用方法(针对非COM数据类型)
用sprintf完成转换
1.char
buffer[200];
c
'
1'
3.int
35;
4.long
j
1000;
5.float
f
1.7320534f;
6.sprintf(
buffer,
%c"
c);
7.sprintf(
%d"
i);
8.sprintf(
j);
9.sprintf(
%f"
f);
charbuffer[200];
charc='
inti=35;
longj=1000;
floatf=1.7320534f;
sprintf(buffer,"
二、字符串转换为其它数据类型
1.strcpy(temp,"
123"
strcpy(temp,"
1.i
atoi(temp);
i=atoi(temp);
1.l
atol(temp);
l=atol(temp);
浮点(double)
1.d
atof(temp);
d=atof(temp);
1.CString
name
temp;
CStringname=temp;
2.///完成对bstrValue的使用
///完成对bstrValue的使用
CComBSTR类型变量可以直接赋值
bstrVar1("
2.CComBSTR
bstrVar2(temp);
CComBSTRbstrVar1("
CComBSTRbstrVar2(temp);
_bstr_t类型的变量可以直接赋值
2._bstr_t
_bstr_tbstrVar1("
_bstr_tbstrVar2(temp);
三、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:
整数(int)
1.str.Format("
str.Format("
浮点数(float)
字符串指针(char*)等已经被CString构造函数支持的数据类型可以直接赋值
username;
str=username;
对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char*的方法先转到char*,然后赋值给CString变量。
四、BSTR、_bstr_t与CComBSTR
CComBSTR是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。
char*转换到BSTR可以这样:
b=_com_util:
ConvertStringToBSTR("
数据"
///使用前需要加上comutil.h和comsupp.lib
2.SysFreeString(bstrValue);
BSTRb=_com_util:
///使用前需要加上comutil.h和comsupp.lib
反之可以使用
*p=_com_util:
ConvertBSTRToString(b);
char*p=_com_util:
deletep;
具体可以参考一,二段落里的具体说明。
CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!
=,==等操作,所以使用非常方便。
特别是_bstr_t,建议大家使用它。
五、VARIANT、_variant_t与COleVariant
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:
首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
1.VARIANT
va;
2.int
a=2001;
3.va.vt=VT_I4;
///指明整型数据
4.va.lVal=a;
///赋值
VARIANTva;
inta=2001;
va.vt=VT_I4;
///指明整型数据
va.lVal=a;
///赋值
对于不马上赋值的VARIANT,最好先用VoidVariantInit(VARIANTARGFAR*pvarg);
进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:
1.Byte
bVal;
//
VT_UI1.
2.Short
iVal;
VT_I2.
3.long
lVal;
VT_I4.
4.float
fltVal;
VT_R4.
5.double
dblVal;
VT_R8.
6.VARIANT_BOOL
boolVal;
VT_BOOL.
7.SCODE
scode;
VT_ERROR.
8.CY
cyVal;
VT_CY.
9.DATE
date;
VT_DATE.
10.BSTR
bstrVal;
VT_BSTR.
11.DECIMAL
FAR*
pdecVal
VT_BYREF|VT_DECIMAL.
12.IUnknown
punkVal;
VT_UNKNOWN.
13.IDispatch
pdispVal;
VT_DISPATCH.
14.SAFEARRAY
parray;
VT_ARRAY|*.
15.Byte
pbVal;
VT_BYREF|VT_UI1.
16.short
piVal;
VT_BYREF|VT_I2.
17.long
plVal;
VT_BYREF|VT_I4.
18.float
pfltVal;
VT_BYREF|VT_R4.
19.double
pdblVal;
VT_BYREF|VT_R8.
20.VARIANT_BOOL
pboolVal;
VT_BYREF|VT_BOOL.
21.SCODE
pscode;
VT_BYREF|VT_ERROR.
22.CY
pcyVal;
VT_BYREF|VT_CY.
23.DATE
pdate;
VT_BYREF|VT_DATE.
24.BSTR
pbstrVal;
VT_BYREF|VT_BSTR.
25.IUnknown
ppunkVal;
VT_BYREF|VT_UNKNOWN.
26.IDispatch
ppdispVal;
VT_BYREF|VT_DISPATCH.
27.SAFEARRAY
pparray;
28.VARIANT
pvarVal;
VT_BYREF|VT_VARIANT.
29.void
byref;
Generic
ByRef.
30.char
cVal;
VT_I1.
31.unsigned
short
uiVal;
VT_UI2.
32.unsigned
long
ulVal;
VT_UI4.
33.int
intVal;
VT_INT.
34.unsigned
int
uintVal;
VT_UINT.
35.char
FAR
pcVal;
VT_BYREF|VT_I1.
36.unsigned
puiVal;
VT_BYREF|VT_UI2.
37.unsigned
pulVal;
VT_BYREF|VT_UI4.
38.int
pintVal;
VT_BYREF|VT_INT.
39.unsigned
puintVal;
//VT_BYREF|VT_UINT.
BytebVal;
//VT_UI1.
ShortiVal;
//VT_I2.
longlVal;
//VT_I4.
floatfltVal;
//VT_R4.
doubledblVal;
//VT_R8.
VARIANT_BOOLboolVal;
//VT_BOOL.
SCODEscode;
//VT_ERROR.
CYcyVal;
//VT_CY.
DATEdate;
//VT_DATE.
BSTRbstrVal;
//VT_BSTR.
DECIMALFAR*pdecVal//VT_BYREF|VT_DECIMAL.
IUnknownFAR*punkVal;
//VT_UNKNOWN.
IDispatchFAR*pdispVal;
//VT_DISPATCH.
SAFEARRAYFAR*parray;
//VT_ARRAY|*.
ByteFAR*pbVal;
//VT_BYREF|VT_UI1.
shortFAR*piVal;
//VT_BYREF|VT_I2.
longFAR*plVal;
//VT_BYREF|VT_I4.
floatFAR*pfltVal;
//VT_BYREF|VT_R4.
doubleFAR*pdblVal;
//VT_BYREF|VT_R8.
VARIANT_BOOLFAR*pboolVal;
//VT_BYREF|VT_BOOL.
SCODEFAR*pscode;
//VT_BYREF|VT_ERROR.
CYFAR*pcyVal;
//VT_BYREF|VT_CY.
DATEFAR*pdate;
//VT_BYREF|VT_DATE.
BSTRFAR*pbstrVal;
//VT_BYREF|VT_BSTR.
IUnknownFAR*FAR*ppunkVal;
//VT_BYREF|VT_UNKNOWN.
IDispatchFAR*FAR*ppdispVal;
//VT_BYREF|VT_DISPATCH.
SAFEARRAYFAR*FAR*pparray;
VARIANTFAR*pvarVal;
//VT_BYREF|VT_VARIANT.
voidFAR*byref;
//GenericByRef.
charcVal;
//VT_I1.
unsignedshortuiVal;
//VT_UI2.
unsignedlongulVal;
//VT_UI4.
intintVal;
//VT_INT.
unsignedintuintVal;
//VT_UINT.
charFAR*pcVal;
//VT_BYREF|VT_I1.
unsignedshortFAR*puiVal;
//VT_BYREF|VT_UI2.
unsignedlongFAR*pulVal;
//VT_BYREF|VT_UI4.
intFAR*pintVal;
//VT_BYREF|VT_INT.
unsignedintFAR*puintVal;
//VT_BYREF|VT_UINT.
_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
使用时需加上#include<
comdef.h>
例如:
1.long
l=222;
2.ing
i=100;
3._variant_t
lVal(l);
4.lVal
(long)i;
longl=222;
ingi=100;
_variant_tlVal(l);
lVal=(long)i;
COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
1.COleVariant
v3
字符串"
v4
(long)1999;
2.CString
str
=(BSTR)v3.pbstrVal;
v4.lVal;
COleVariantv3="
v4=(long)1999;
CStringstr=(BSTR)v3.pbstrVal;
longi=v4.lVal;
六、其它一些COM数据类型
根据ProgID得到CLSID
1.HRESULT
CLSIDFromProgID(
LPCOLESTR
lpszProgID,LPCLSID
pclsid);
2.CLSID
clsid;
3.CLSIDFromProgID(
L"
MAPI.Folder"
&
clsid);
HRESULTCLSIDFromProgID(LPCOLESTRlpszProgID,LPCLSIDpclsid);
CLSIDclsid;
CLSIDFromProgID(L"
根据CLSID得到ProgID
1.WINOLEAPI
ProgIDFromCLSID(
REFCLSID
clsid,LPOLESTR
lplpszProgID);
WINOLEAPIProgIDFromCLSID(REFCLSIDclsid,LPOLESTR*lplpszProgID);
例如我们已经定义了CLSID_IApplication,下面的代码得到ProgID
1.LPOLESTR
pProgID
0;
2.ProgIDFromCLSID(
CLSID_IApplication,&
pProgID);
///可以使用pProgID
3.CoTaskMemFree(pProgID);
//不要忘记释放
LPOLESTRpProgID=0;
ProgIDFromCLSID(CLSID_IApplication,&
///可以使用pProgID
CoTaskMemFree(pProgID);
//不要忘记释放
七、ANSI与Unicode
Unicode称为宽字符型字串,COM里使用的都是Unicode字符串。
将ANSI转换到Unicode
(1)通过L这个宏来实现,例如:
1.CLSIDFromProgID(
CLSIDFromProgID(L"
(2)通过MultiByteToWideChar函数实现转换,例如:
*szProgID
2.WCHAR
szWideProgID[128];
3.CLSID
lLen
MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));
5.szWideProgID[lLen]
\0'
char*szProgID="
WCHARszWideProgID[128];
CLSID
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 数据类型 转换 大全