VC++数据类型转换大全.docx
- 文档编号:4919937
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:18
- 大小:24.16KB
VC++数据类型转换大全.docx
《VC++数据类型转换大全.docx》由会员分享,可在线阅读,更多相关《VC++数据类型转换大全.docx(18页珍藏版)》请在冰豆网上搜索。
VC++数据类型转换大全
VC++数据类型转换大全
Cpp代码
1.int i = 100;
2.long l = 2001;
3.float f=300.2;
4.double d=12345.119;
5.char username[]="程佩君";
6.char temp[200];
7.char *buf;
8.CString str;
9._variant_t v1;
10._bstr_t v2;
inti=100;
longl=2001;
floatf=300.2;
doubled=12345.119;
charusername[]="程佩君";
chartemp[200];
char*buf;
CStringstr;
_variant_tv1;
_bstr_tv2;
一、其它数据类型转换为字符串
短整型(int)
Cpp代码
1.itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
2.itoa(i,temp,2); ///按二进制方式转换
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2);///按二进制方式转换
长整型(long)
Cpp代码
1.ltoa(l,temp,10);
ltoa(l,temp,10);
浮点数(float,double)
用fcvt可以完成转换,这是MSDN中的例子:
Cpp代码
1.int decimal, sign;
2.char *buffer;
3.double source = 3.1415926535;
4.buffer = _fcvt( source, 7, &decimal, &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变量
Cpp代码
1.str = "2008北京奥运";
2.buf = (LPSTR)(LPCTSTR)str;
str="2008北京奥运";
buf=(LPSTR)(LPCTSTR)str;
BSTR变量
Cpp代码
1.BSTR bstrValue = :
:
SysAllocString(L"程序员");
2.char * buf = _com_util:
:
ConvertBSTRToString(bstrValue);
3.SysFreeString(bstrValue);
4.AfxMessageBox(buf);
5.delete(buf);
BSTRbstrValue=:
:
SysAllocString(L"程序员");
char*buf=_com_util:
:
ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf);
CComBSTR变量
Cpp代码
1.CComBSTR bstrVar("test");
2.char *buf = _com_util:
:
ConvertBSTRToString(bstrVar.m_str);
3.AfxMessageBox(buf);
4.delete(buf);
CComBSTRbstrVar("test");
char*buf=_com_util:
:
ConvertBSTRToString(bstrVar.m_str);
AfxMessageBox(buf);
delete(buf);
_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
Cpp代码
1._bstr_t bstrVar("test");
2.const char *buf = bstrVar;///不要修改buf中的内容
3.AfxMessageBox(buf);
_bstr_tbstrVar("test");
constchar*buf=bstrVar;///不要修改buf中的内容
AfxMessageBox(buf);
通用方法(针对非COM数据类型)
用sprintf完成转换
Cpp代码
1.char buffer[200];
2.char c = '1';
3.int i = 35;
4.long j = 1000;
5.float f = 1.7320534f;
6.sprintf( buffer, "%c",c);
7.sprintf( buffer, "%d",i);
8.sprintf( buffer, "%d",j);
9.sprintf( buffer, "%f",f);
charbuffer[200];
charc='1';
inti=35;
longj=1000;
floatf=1.7320534f;
sprintf(buffer,"%c",c);
sprintf(buffer,"%d",i);
sprintf(buffer,"%d",j);
sprintf(buffer,"%f",f);
二、字符串转换为其它数据类型
Cpp代码
1.strcpy(temp,"123");
strcpy(temp,"123");
短整型(int)
Cpp代码
1.i = atoi(temp);
i=atoi(temp);
长整型(long)
Cpp代码
1.l = atol(temp);
l=atol(temp);
浮点(double)
Cpp代码
1.d = atof(temp);
d=atof(temp);
CString变量
Cpp代码
1.CString name = temp;
CStringname=temp;
BSTR变量
Cpp代码
1.BSTR bstrValue = :
:
SysAllocString(L"程序员");
2.///完成对bstrValue的使用
3.SysFreeString(bstrValue);
BSTRbstrValue=:
:
SysAllocString(L"程序员");
///完成对bstrValue的使用
SysFreeString(bstrValue);
CComBSTR变量
CComBSTR类型变量可以直接赋值
Cpp代码
1.CComBSTR bstrVar1("test");
2.CComBSTR bstrVar2(temp);
CComBSTRbstrVar1("test");
CComBSTRbstrVar2(temp);
_bstr_t变量
_bstr_t类型的变量可以直接赋值
Cpp代码
1._bstr_t bstrVar1("test");
2._bstr_t bstrVar2(temp);
_bstr_tbstrVar1("test");
_bstr_tbstrVar2(temp);
三、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:
整数(int)
Cpp代码
1.str.Format("%d",i);
str.Format("%d",i);
浮点数(float)
Cpp代码
1.str.Format("%f",i);
str.Format("%f",i);
字符串指针(char*)等已经被CString构造函数支持的数据类型可以直接赋值
Cpp代码
1.str = username;
str=username;
对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char*的方法先转到char*,然后赋值给CString变量。
四、BSTR、_bstr_t与CComBSTR
CComBSTR是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。
char*转换到BSTR可以这样:
Cpp代码
1.BSTR b=_com_util:
:
ConvertStringToBSTR("数据");///使用前需要加上comutil.h和comsupp.lib
2.SysFreeString(bstrValue);
BSTRb=_com_util:
:
ConvertStringToBSTR("数据");///使用前需要加上comutil.h和comsupp.lib
SysFreeString(bstrValue);
反之可以使用
Cpp代码
1.char *p=_com_util:
:
ConvertBSTRToString(b);
char*p=_com_util:
:
ConvertBSTRToString(b);
deletep;
具体可以参考一,二段落里的具体说明。
CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!
=,==等操作,所以使用非常方便。
特别是_bstr_t,建议大家使用它。
五、VARIANT、_variant_t与COleVariant
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:
首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
Cpp代码
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与常用数据的对应关系:
Cpp代码
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 FAR* punkVal; // VT_UNKNOWN.
13.IDispatch FAR* pdispVal; // VT_DISPATCH.
14.SAFEARRAY FAR* parray; // VT_ARRAY|*.
15.Byte FAR* pbVal; // VT_BYREF|VT_UI1.
16.short FAR* piVal; // VT_BYREF|VT_I2.
17.long FAR* plVal; // VT_BYREF|VT_I4.
18.float FAR* pfltVal; // VT_BYREF|VT_R4.
19.double FAR* pdblVal; // VT_BYREF|VT_R8.
20.VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL.
21.SCODE FAR* pscode; // VT_BYREF|VT_ERROR.
22.CY FAR* pcyVal; // VT_BYREF|VT_CY.
23.DATE FAR* pdate; // VT_BYREF|VT_DATE.
24.BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
25.IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
26.IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
27.SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
28.VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
29.void FAR* 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 short FAR * puiVal; // VT_BYREF|VT_UI2.
37.unsigned long FAR * pulVal; // VT_BYREF|VT_UI4.
38.int FAR * pintVal; // VT_BYREF|VT_INT.
39.unsigned int FAR * 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;//VT_ARRAY|*.
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
例如:
Cpp代码
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的方法基本一样,请参考如下例子:
Cpp代码
1.COleVariant v3 = "字符串", v4 = (long)1999;
2.CString str =(BSTR)v3.pbstrVal;
3.long i = v4.lVal;
COleVariantv3="字符串",v4=(long)1999;
CStringstr=(BSTR)v3.pbstrVal;
longi=v4.lVal;
六、其它一些COM数据类型
根据ProgID得到CLSID
Cpp代码
1.HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID,LPCLSID pclsid);
2.CLSID clsid;
3.CLSIDFromProgID( L"MAPI.Folder",&clsid);
HRESULTCLSIDFromProgID(LPCOLESTRlpszProgID,LPCLSIDpclsid);
CLSIDclsid;
CLSIDFromProgID(L"MAPI.Folder",&clsid);
根据CLSID得到ProgID
Cpp代码
1.WINOLEAPI ProgIDFromCLSID( REFCLSID clsid,LPOLESTR * lplpszProgID);
WINOLEAPIProgIDFromCLSID(REFCLSIDclsid,LPOLESTR*lplpszProgID);
例如我们已经定义了CLSID_IApplication,下面的代码得到ProgID
Cpp代码
1.LPOLESTR pProgID = 0;
2.ProgIDFromCLSID( CLSID_IApplication,&pProgID);///可以使用pProgID
3.CoTaskMemFree(pProgID);//不要忘记释放
LPOLESTRpProgID=0;
ProgIDFromCLSID(CLSID_IApplication,&pProgID);///可以使用pProgID
CoTaskMemFree(pProgID);//不要忘记释放
七、ANSI与Unicode
Unicode称为宽字符型字串,COM里使用的都是Unicode字符串。
将ANSI转换到Unicode
(1)通过L这个宏来实现,例如:
Cpp代码
1.CLSIDFromProgID( L"MAPI.Folder",&clsid);
CLSIDFromProgID(L"MAPI.Folder",&clsid);
(2)通过MultiByteToWideChar函数实现转换,例如:
Cpp代码
1.char *szProgID = "MAPI.Folder";
2.WCHAR szWideProgID[128];
3.CLSID clsid;
4.long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));
5.szWideProgID[lLen] = '\0';
char*szProgID="MAPI.Folder";
WCHARszWideProgID[128];
CLSID
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 数据类型 转换 大全