您的位置:首页 > 编程语言 > C语言/C++

C++类型转换总结

2007-11-16 22:17 423 查看
-

-

-

本文背景:某天,本人做COM相关编程,常需要做BSTR至String的类型转换,上网搜了一下,对URL:/article/5166567.html 做了一下简单总结。

本文目的:方便急需类型转换的编程人员。

本文内容:

(注:以下的itoa及atoi方法以属deferred, 宜用_itoa及_atoi)

1. 转换成字符串
--通用方法(针对非COM数据类型)
用sprintf完成转换
char buffer[200];
char c = '1';
int i = 35;
long j = 1000;
float f = 1.7320534f;
sprintf( buffer, "%c",c);
sprintf( buffer, "%d",i);
sprintf( buffer, "%d",j);
sprintf( buffer, "%f",f);

--短整型(int)
itoa(i,temp,10); 按十进制转换
itoa(i,temp,2); 按二进制方式转换

--长整型(long)
ltoa(l,temp,10);

--浮点数(float,double)
int decimal, sign;
char *buffer;
double source = 3.1415926535;
buffer = _fcvt( source, 7, &decimal, &sign );
decimal表示小数点的位置,sign表示符号:0为正数,1为负数

--CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;

--BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
char * buf = _com_util::ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
或者
char szFileName[len];
size_t size = wcstombs(szFileName, Filename, len);

--CComBSTR变量
CComBSTR bstrVar("test");
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);

--使用CString的成员函数Format来转换
整数(int)
str.Format("%d",i);
浮点数(float)
str.Format("%f",i);

2. 字符串转换成
char* temp
strcpy(temp,"123")

--短整型(int)
i = atoi(temp);

--长整型(long)
l = atol(temp);

--浮点(double)
d = atof(temp);

--CString变量
CString name = temp;

--BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
SysFreeString(bstrValue);

--CComBSTR 是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。
BSTR b=_com_util::ConvertStringToBSTR("数据");
SysFreeString(bstrValue);
(使用前需要加上comutil.h和comsupp.lib)
反之可以使用
char *p=_com_util::ConvertBSTRToString(b);

--CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTR bstrVar2(temp);

--_bstr_t变量
_bstr_t类型的变量可以直接赋值
_bstr_t bstrVar2(temp);

3. VARIANT
VARIANT的类型总结如下:
[align=left]Byte bVal; [/align]
[align=left]// VT_UI1.[/align]
[align=left]Short iVal; [/align]
[align=left]// VT_I2.[/align]
[align=left]long lVal; [/align]
[align=left]// VT_I4.[/align]
[align=left]float fltVal; [/align]
[align=left]// VT_R4.[/align]
[align=left]double dblVal; [/align]
[align=left]// VT_R8.[/align]
[align=left]VARIANT_BOOL boolVal; [/align]
[align=left]// VT_BOOL.[/align]
[align=left]SCODE scode; [/align]
[align=left]// VT_ERROR.[/align]
[align=left]CY cyVal; [/align]
[align=left]// VT_CY.[/align]
[align=left]DATE date; [/align]
[align=left]// VT_DATE.[/align]
[align=left]BSTR bstrVal; [/align]
[align=left]// VT_BSTR.[/align]
[align=left]DECIMAL FAR* pdecVal [/align]
[align=left]// VT_BYREF|VT_DECIMAL.[/align]
[align=left]IUnknown FAR* punkVal; [/align]
[align=left]// VT_UNKNOWN.[/align]
[align=left]IDispatch FAR* pdispVal; [/align]
[align=left]// VT_DISPATCH.[/align]
[align=left]SAFEARRAY FAR* parray; [/align]
[align=left]// VT_ARRAY|*.[/align]
[align=left]Byte FAR* pbVal; [/align]
[align=left]// VT_BYREF|VT_UI1.[/align]
[align=left]short FAR* piVal; [/align]
[align=left]// VT_BYREF|VT_I2.[/align]
[align=left]long FAR* plVal; [/align]
[align=left]// VT_BYREF|VT_I4.[/align]
[align=left]float FAR* pfltVal; [/align]
[align=left]// VT_BYREF|VT_R4.[/align]
[align=left]double FAR* pdblVal; [/align]
[align=left]// VT_BYREF|VT_R8.[/align]
[align=left]VARIANT_BOOL FAR* pboolVal; [/align]
[align=left]// VT_BYREF|VT_BOOL.[/align]
[align=left]SCODE FAR* pscode; [/align]
[align=left]// VT_BYREF|VT_ERROR.[/align]
[align=left]CY FAR* pcyVal; [/align]
[align=left]// VT_BYREF|VT_CY.[/align]
[align=left]DATE FAR* pdate; [/align]
[align=left]// VT_BYREF|VT_DATE.[/align]
[align=left]BSTR FAR* pbstrVal; [/align]
[align=left]// VT_BYREF|VT_BSTR.[/align]
[align=left]IUnknown FAR* FAR* ppunkVal; [/align]
[align=left]// VT_BYREF|VT_UNKNOWN.[/align]
[align=left]IDispatch FAR* FAR* ppdispVal; [/align]
[align=left]// VT_BYREF|VT_DISPATCH.[/align]
[align=left]SAFEARRAY FAR* FAR* pparray; [/align]
[align=left]// VT_ARRAY|*.[/align]
[align=left]VARIANT FAR* pvarVal; [/align]
[align=left]// VT_BYREF|VT_VARIANT.[/align]
[align=left]void FAR* byref; [/align]
[align=left]// Generic ByRef.[/align]
[align=left]char cVal; [/align]
[align=left]// VT_I1.[/align]
[align=left]unsigned short uiVal; [/align]
[align=left]// VT_UI2.[/align]
[align=left]unsigned long ulVal; [/align]
[align=left]// VT_UI4.[/align]
[align=left]int intVal; [/align]
[align=left]// VT_INT.[/align]
[align=left]unsigned int uintVal; [/align]
[align=left]// VT_UINT.[/align]
[align=left]char FAR * pcVal; [/align]
[align=left]// VT_BYREF|VT_I1.[/align]
[align=left]unsigned short FAR * puiVal; [/align]
[align=left]// VT_BYREF|VT_UI2.[/align]
[align=left]unsigned long FAR * pulVal; [/align]
[align=left]// VT_BYREF|VT_UI4.[/align]
[align=left]int FAR * pintVal; [/align]
[align=left]// VT_BYREF|VT_INT.[/align]
[align=left]unsigned int FAR * puintVal; [/align]
[align=left]//VT_BYREF|VT_UINT.[/align]
[align=left]_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。[/align]

----文章结束----
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: