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]_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。[/align]
----文章结束----
-
-
本文背景:某天,本人做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] |
----文章结束----
相关文章推荐
- C++ reinterpret_cast,const_cast等 显式类型转换总结
- C++中的数据类型转换方法总结
- C++ reinterpret_cast,const_cast等 显式类型转换总结
- C++类型转换总结
- C++类型转换总结
- C++总结之四种类型转换方式(20160806)
- C与C++类型强制转换总结
- C++类型转换总结
- C++对象类型转换问题概括总结
- C/C++类型转换总结
- C++类型转换总结
- C++类型转换总结
- C++ reinterpret_cast,const_cast等 显式类型转换总结
- C++类型转换以及文件读写的总结
- C/C++中int/long/float/double数值类型与字符串互相转换[总结]
- C++类型转换方式总结
- C++ reinterpret_cast,const_cast等 显式类型转换总结(转载)
- C/C++中int/long/float/double数值类型与字符串互相转换[总结]
- C++类型转换总结
- C++各数据类型的相互转换 总结一