C++类型转换总结

-

-

-

本文背景:某天,本人做COM相关编程,常需要做BSTR至String的类型转换,上网搜了一下,对URL:http://www.cnblogs.com/wangliang651/archive/2006/11/22/568364.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的类型总结如下:
Byte 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.
DECIMAL FAR* pdecVal
// VT_BYREF|VT_DECIMAL.
IUnknown FAR* punkVal;
// VT_UNKNOWN.
IDispatch FAR* pdispVal;
// VT_DISPATCH.
SAFEARRAY FAR* parray;
// VT_ARRAY|*.
Byte 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;
// Generic ByRef.
char cVal;
// VT_I1.
unsigned short uiVal;
// VT_UI2.
unsigned long ulVal;
// VT_UI4.
int intVal;
// VT_INT.
unsigned int uintVal;
// VT_UINT.
char FAR * pcVal;
// VT_BYREF|VT_I1.
unsigned short FAR * puiVal;
// VT_BYREF|VT_UI2.
unsigned long FAR * pulVal;
// VT_BYREF|VT_UI4.
int FAR * pintVal;
// VT_BYREF|VT_INT.
unsigned int FAR * puintVal;
//VT_BYREF|VT_UINT.
_variant_t VARIANT 的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
 
----文章结束----
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值