⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 type_convert.htm

📁 关于数据类型转换的一些总结
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  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, &amp;decimal, 
                    &amp;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 + -