-
-
-
本文背景:某天,本人做COM相关编程,常需要做BSTR至String的类型转换,上网搜了一下,对URL:http://www.cnblogs.com/wangliang651/archive/2006/11/22/568364.html 做了一下简单总结。
本文目的:方便急需类型转换的编程人员。
本文内容:
(注:以下的itoa及atoi方法以属deferred, 宜用_itoa及_atoi)
1.
…
转换成字符串
--通用方法
(
针对非
COM
数据类型
)
用 sprintf 完成转换
用 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); 按二进制方式转换
itoa(i,temp,10); 按 十进制 转换
itoa(i,temp,2); 按二进制方式转换
--长整型
(long)
ltoa(l,temp,10);
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 为负数
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;
str = "2008 北京奥运 ";
buf = (LPSTR)(LPCTSTR)str;
--BSTR
变量
BSTR bstrValue = ::SysAllocString(L" 程序员 ");
char * buf = _com_util::ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
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);
CComBSTR bstrVar("test");
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);
--使用
CString
的成员函数
Format
来转换
整数
(int)
str.Format("%d",i);
str.Format("%d",i);
浮点数
(float)
str.Format("%f",i);
str.Format("%f",i);
2.
字符串转换成
…
char* temp
strcpy(temp,"123")
--短整型
(int)
i = atoi(temp);
i = atoi(temp);
--长整型
(long)
l = atol(temp);
l = atol(temp);
--浮点
(double)
d = atof(temp);
d = atof(temp);
--CString
变量
CString name = temp;
CString name = temp;
--BSTR
变量
BSTR bstrValue = ::SysAllocString(L" 程序员 ");
SysFreeString(bstrValue);
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);
反之可以使用
char *p=_com_util::ConvertBSTRToString(b);
--CComBSTR
变量
CComBSTR 类型变量可以直接赋值
CComBSTR bstrVar2(temp);
CComBSTR 类型变量可以直接赋值
CComBSTR bstrVar2(temp);
--_bstr_t
变量
_bstr_t 类型的变量可以直接赋值
_bstr_t bstrVar2(temp);
_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
的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。