📄 type_convert.htm
字号:
temp[200];<BR>char *buf;<BR>CString str;<BR>_variant_t
v1;<BR>_bstr_t v2;<BR><BR><FONT
color=#6699ff><B>一、其它数据类型转换为字符串</B></FONT><BR></P>
<UL>
<LI><FONT
color=#6699ff>短整型(int)</FONT><BR>itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制<BR>itoa(i,temp,2);
///按二进制方式转换
<LI><FONT color=#6699ff>长整型(long)</FONT><BR>ltoa(l,temp,10);
<LI><FONT
color=#6699ff>浮点数(float,double)</FONT><BR>用fcvt可以完成转换,这是MSDN中的例子:<BR>int
decimal, sign; <BR>char *buffer; <BR>double source =
3.1415926535; <BR>buffer = _fcvt( source, 7, &decimal,
&sign ); <BR>运行结果:source: 3.1415926535 buffer:
'31415927' decimal: 1 sign:
0<BR>decimal表示小数点的位置,sign表示符号:0为正数,1为负数
<LI><FONT color=#6699ff>CString变量</FONT><BR>str =
"2008北京奥运";<BR>buf = (LPSTR)(LPCTSTR)str;
<LI><FONT color=#6699ff>BSTR变量</FONT><BR>BSTR bstrValue =
::SysAllocString(L"程序员"); <BR>char * buf =
_com_util::ConvertBSTRToString(bstrValue);
<BR>SysFreeString(bstrValue); <BR>AfxMessageBox(buf);
<BR>delete(buf);
<LI><FONT color=#6699ff>CComBSTR变量</FONT><BR>CComBSTR
bstrVar("test"); <BR>char *buf =
_com_util::ConvertBSTRToString(bstrVar.m_str);
<BR>AfxMessageBox(buf); <BR>delete(buf); <BR>
<LI><FONT
color=#6699ff>_bstr_t变量</FONT><BR>_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用<BR>_bstr_t
bstrVar("test"); <BR>const char *buf =
bstrVar;///不要修改buf中的内容 <BR>AfxMessageBox(buf); <BR><BR>
<LI><FONT
color=#6699ff>通用方法(针对非COM数据类型)</FONT><BR>用sprintf完成转换<BR><PRE>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);
</PRE></LI></UL>
<P><B><FONT
color=#6699ff>二、字符串转换为其它数据类型</FONT></B><BR>strcpy(temp,"123");
</P>
<UL>
<LI><FONT color=#6699ff>短整型(int)</FONT><BR>i = atoi(temp);
<LI><FONT color=#6699ff>长整型(long)</FONT><BR>l = atol(temp);
<LI><FONT color=#6699ff>浮点(double)</FONT><BR>d = atof(temp);
<LI><FONT color=#6699ff>CString变量</FONT><BR>CString name =
temp;
<LI><FONT color=#6699ff>BSTR变量</FONT> <BR>BSTR bstrValue =
::SysAllocString(L"程序员");
<BR>...///完成对bstrValue的使用<BR>SysFreeString(bstrValue); <BR>
<LI><FONT
color=#6699ff>CComBSTR变量</FONT><BR>CComBSTR类型变量可以直接赋值<BR>CComBSTR
bstrVar1("test");<BR>CComBSTR bstrVar2(temp);<BR>
<LI><FONT
color=#6699ff>_bstr_t变量</FONT><BR>_bstr_t类型的变量可以直接赋值<BR>_bstr_t
bstrVar1("test"); <BR>_bstr_t bstrVar2(temp);
<BR><BR></LI></UL>
<P><B><FONT
color=#6699ff>三、其它数据类型转换到CString</FONT></B><BR>使用CString的成员函数Format来转换,例如:<BR></P>
<UL>
<LI>整数(int)<BR>str.Format("%d",i);
<LI>浮点数(float)<BR>str.Format("%f",i);
<LI>字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值<BR>str =
username;
<LI>对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char
*,然后赋值给CString变量。<BR></LI></UL>
<P><B><FONT
color=#6699ff>四、BSTR、_bstr_t与CComBSTR</FONT></B><BR></P>
<UL>
<LI>CComBSTR
是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。<BR>char
*转换到BSTR可以这样: <BR>BSTR
b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上comutil.h和comsupp.lib<BR>SysFreeString(bstrValue);
<BR>反之可以使用<BR>char
*p=_com_util::ConvertBSTRToString(b);<BR>delete
p;<BR>具体可以参考一,二段落里的具体说明。<BR><BR>CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!=,==等操作,所以使用非常方便。<BR>特别是_bstr_t,建议大家使用它。<BR></LI></UL>
<P><B><FONT color=#6699ff>五、VARIANT 、_variant_t 与
COleVariant</FONT></B><BR></P>
<UL>
<LI>VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。<BR>对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:<BR>VARIANT
va;<BR>int a=2001;<BR>va.vt=VT_I4;///指明整型数据<BR>va.lVal=a;
///赋值<BR><BR>对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG
FAR*
pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:<BR><BR>
<TABLE cellSpacing=1 cellPadding=0 width=792 bgColor=#333333
border=0>
<TBODY>
<TR bgColor=#ffffff>
<TD width=442>Byte bVal; </TD>
<TD width=338>// VT_UI1.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>Short iVal; </TD>
<TD width=338>// VT_I2.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>long lVal; </TD>
<TD width=338>// VT_I4.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>float fltVal; </TD>
<TD width=338>// VT_R4.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>double dblVal; </TD>
<TD width=338>// VT_R8.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>VARIANT_BOOL boolVal; </TD>
<TD width=338>// VT_BOOL.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>SCODE scode; </TD>
<TD width=338>// VT_ERROR.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>CY cyVal; </TD>
<TD width=338>// VT_CY.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>DATE date; </TD>
<TD width=338>// VT_DATE.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>BSTR bstrVal; </TD>
<TD width=338>// VT_BSTR.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>DECIMAL FAR* pdecVal </TD>
<TD width=338>// VT_BYREF|VT_DECIMAL.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>IUnknown FAR* punkVal; </TD>
<TD width=338>// VT_UNKNOWN.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>IDispatch FAR* pdispVal; </TD>
<TD width=338>// VT_DISPATCH.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>SAFEARRAY FAR* parray; </TD>
<TD width=338>// VT_ARRAY|*.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>Byte FAR* pbVal; </TD>
<TD width=338>// VT_BYREF|VT_UI1.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>short FAR* piVal; </TD>
<TD width=338>// VT_BYREF|VT_I2.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>long FAR* plVal; </TD>
<TD width=338>// VT_BYREF|VT_I4.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>float FAR* pfltVal; </TD>
<TD width=338>// VT_BYREF|VT_R4.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>double FAR* pdblVal; </TD>
<TD width=338>// VT_BYREF|VT_R8.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>VARIANT_BOOL FAR* pboolVal; </TD>
<TD width=338>// VT_BYREF|VT_BOOL.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>SCODE FAR* pscode; </TD>
<TD width=338>// VT_BYREF|VT_ERROR.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>CY FAR* pcyVal; </TD>
<TD width=338>// VT_BYREF|VT_CY.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>DATE FAR* pdate; </TD>
<TD width=338>// VT_BYREF|VT_DATE.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>BSTR FAR* pbstrVal; </TD>
<TD width=338>// VT_BYREF|VT_BSTR.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>IUnknown FAR* FAR* ppunkVal; </TD>
<TD width=338>// VT_BYREF|VT_UNKNOWN.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>IDispatch FAR* FAR* ppdispVal; </TD>
<TD width=338>// VT_BYREF|VT_DISPATCH.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>SAFEARRAY FAR* FAR* pparray; </TD>
<TD width=338>// VT_ARRAY|*.</TD></TR>
<TR bgColor=#ffffff>
<TD width=442>VARIANT FAR* pvarVal; </TD>
<TD width=338>// VT_BYREF|VT_VARIANT.</TD></TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -