C++有关数据类型转换大全.docx
- 文档编号:7281968
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:18
- 大小:18.33KB
C++有关数据类型转换大全.docx
《C++有关数据类型转换大全.docx》由会员分享,可在线阅读,更多相关《C++有关数据类型转换大全.docx(18页珍藏版)》请在冰豆网上搜索。
C++有关数据类型转换大全
C++有关数据类型转换大全
来源:
中国自学编程网发布日期:
2007-05-21
inti=100;
longl=2001;
floatf=300.2;
doubled=12345.119;
charusername[]=\"程佩君\";
chartemp[200];
char*buf;
CStringstr;
_variant_tv1;
_bstr_tv2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2);///按二进制方式转换
长整型(long)
ltoa(l,temp,10);
浮点数(float,double)
用fcvt可以完成转换,这是MSDN中的例子:
intdecimal,sign;
char*buffer;
doublesource=3.1415926535;
buffer=_fcvt(source,7,&decimal,&sign);
运行结果:
source:
3.1415926535buffer:
’31415927’decimal:
1sign:
0
decimal表示小数点的位置,sign表示符号:
0为正数,1为负数
CString变量
str=\"2008北京奥运\";
buf=(LPSTR)(LPCTSTR)str;
BSTR变量
BSTRbstrValue=:
:
SysAllocString(L\"程序员\");
char*buf=_com_util:
:
ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf);
CComBSTR变量
CComBSTRbstrVar(\"test\");
char*buf=_com_util:
:
ConvertBSTRToString(bstrVar.m_str);
AfxMessageBox(buf);
delete(buf);
_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
_bstr_tbstrVar(\"test\");
constchar*buf=bstrVar;///不要修改buf中的内容
AfxMessageBox(buf);
通用方法(针对非COM数据类型)
用sprintf完成转换
charbuffer[200];charc=’1’;inti=35;longj=1000;floatf=1.7320534f;sprintf(buffer,\"%c\",c);sprintf(buffer,\"%d\",i);sprintf(buffer,\"%d\",j);sprintf(buffer,\"%f\",f);
二、字符串转换为其它数据类型
strcpy(temp,\"123\");
短整型(int)
i=atoi(temp);
长整型(long)
l=atol(temp);
浮点(double)
d=atof(temp);
CString变量
CStringname=temp;
BSTR变量
BSTRbstrValue=:
:
SysAllocString(L\"程序员\");
...///完成对bstrValue的使用
SysFreeString(bstrValue);
CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTRbstrVar1(\"test\");
CComBSTRbstrVar2(temp);
_bstr_t变量[Page]
_bstr_t类型的变量可以直接赋值
_bstr_tbstrVar1(\"test\");
_bstr_tbstrVar2(temp);
三、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:
整数(int)
str.Format(\"%d\",i);
浮点数(float)
str.Format(\"%f\",i);
字符串指针(char*)等已经被CString构造函数支持的数据类型可以直接赋值
str=username;
对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char*的方法先转到char*,然后赋值给CString变量。
四、BSTR、_bstr_t与CComBSTR
CComBSTR是ATL对BSTR的封装,_bstr_t是C++对BSTR的封装,BSTR是32位指针,但并不直接指向字串的缓冲区。
char*转换到BSTR可以这样:
BSTRb=_com_util:
:
ConvertStringToBSTR(\"数据\");///使用前需要加上comutil.h和comsupp.lib
SysFreeString(bstrValue);
反之可以使用
char*p=_com_util:
:
ConvertBSTRToString(b);
deletep;
具体可以参考一,二段落里的具体说明。
CComBSTR与_bstr_t对大量的操作符进行了重载,可以直接进行=,!
=,==等操作,所以使用非常方便。
特别是_bstr_t,建议大家使用它。
五、VARIANT、_variant_t与COleVariant
VARIANT的结构可以参考头文件VC98\\Include\\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:
首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANTva;
inta=2001;
va.vt=VT_I4;///指明整型数据
va.lVal=a;///赋值
_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
使用时需加上#include
例如:
longl=222;
ingi=100;
_variant_tlVal(l);
lVal=(long)i;
COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariantv3=\"字符串\",v4=(long)1999;
CStringstr=(BSTR)v3.pbstrVal;
longi=v4.lVal;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
本主题演示如何将各种C++字符串类型转换为其他字符串。
可以转换的字符串类型包括char*、wchar_t*、_bstr_t、CComBSTR、CString、basic_string和System.String。
在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。
对新字符串进行的任何更改都不会影响原始字符串,反之亦然。
从char*转换
示例
说明
此示例演示如何从char*转换为上面列出的其他字符串类型。
//convert_from_char.cpp
//compilewith/clr/linkcomsuppw.lib
#include
#include
#include
#include\"atlbase.h\"
#include\"atlstr.h\"
#include\"comutil.h\"
usingnamespacestd;
usingnamespaceSystem;
intmain()
{
char*orig=\"Hello,World!
\";
cout< //Converttoawchar_t* size_torigsize=strlen(orig)+1; constsize_tnewsize=100; size_tconvertedChars=0; wchar_twcstring[newsize]; mbstowcs_s(&convertedChars,wcstring,origsize,orig,_TRUNCATE); wcscat_s(wcstring,L\"(wchar_t*)\"); wcout< //Converttoa_bstr_t _bstr_tbstrt(orig); bstrt+=\"(_bstr_t)\"; cout< //ConverttoaCComBSTR CComBSTRccombstr(orig); if(ccombstr.Append(L\"(CComBSTR)\")==S_OK) { CW2Aprintstr(ccombstr); cout< } //ConverttoaCString CStringcstring(orig); cstring+=\"(CString)\"; cout< //Converttoabasic_string stringbasicstring(orig); basicstring+=\"(basic_string)\"; cout< //ConverttoaSystem: : String String^systemstring=gcnewString(orig); systemstring+=\"(System: : String)\"; Console: : WriteLine(\"{0}\",systemstring);[Page] deletesystemstring; } 输出 Hello,World! (char*) Hello,World! (wchar_t*) Hello,World! (_bstr_t) Hello,World! (CComBSTR) Hello,World! (CString) Hello,World! (basic_string) Hello,World! (System: : String) 从wchar_t*转换 示例 说明 此示例演示如何从wchar_t*转换为上面列出的其他字符串类型。 //convert_from_wchar_t.cpp //compilewith/clr/linkcomsuppw.lib #include #include #include #include\"atlbase.h\" #include\"atlstr.h\" #include\"comutil.h\" usingnamespacestd; usingnamespaceSystem; intmain() { wchar_t*orig=L\"Hello,World! \"; wcout< //Converttoachar* size_torigsize=wcslen(orig)+1; constsize_tnewsize=100; size_tconvertedChars=0; charnstring[newsize]; wcstombs_s(&convertedChars,nstring,origsize,orig,_TRUNCATE); strcat_s(nstring,\"(char*)\"); cout< //Converttoa_bstr_t _bstr_tbstrt(orig); bstrt+=\"(_bstr_t)\"; cout< //ConverttoaCComBSTR CComBSTRccombstr(orig); if(ccombstr.Append(L\"(CComBSTR)\")==S_OK) { CW2Aprintstr(ccombstr); cout< } //ConverttoaCString CStringcstring(orig); cstring+=\"(CString)\"; cout< //Converttoabasic_string wstringbasicstring(orig); basicstring+=L\"(basic_string)\"; wcout< //ConverttoaSystem: : String String^systemstring=gcnewString(orig); systemstring+=\"(System: : String)\"; Console: : WriteLine(\"{0}\",systemstring); deletesystemstring; } 输出 Hello,World! (wchar_t*) Hello,World! (char*) Hello,World! (_bstr_t) Hello,World! (CComBSTR) Hello,World! (CString) Hello,World! (basic_string) Hello,World! (System: : String) 从_bstr_t转换 示例 说明 此示例演示如何从_bstr_t转换为上面列出的其他字符串类型。 //convert_from_bstr_t.cpp //compilewith/clr/linkcomsuppw.lib #include #include #include #include\"atlbase.h\" #include\"atlstr.h\" #include\"comutil.h\" usingnamespacestd; usingnamespaceSystem; intmain() { _bstr_torig(\"Hello,World! \"); wcout< //Converttoachar* constsize_tnewsize=100; charnstring[newsize]; strcpy_s(nstring,(char*)orig); strcat_s(nstring,\"(char*)\"); cout< //Converttoawchar_t* wchar_twcstring[newsize]; wcscpy_s(wcstring,(wchar_t*)orig); wcscat_s(wcstring,L\"(wchar_t*)\"); wcout< //ConverttoaCComBSTR CComBSTRccombstr((char*)orig); if(ccombstr.Append(L\"(CComBSTR)\")==S_OK)[Page] { CW2Aprintstr(ccombstr); cout< } //ConverttoaCString CStringcstring((char*)orig); cstring+=\"(CString)\"; cout< //Converttoabasic_string stringbasicstring((char*)orig); basicstring+=\"(basic_string)\"; cout< //ConverttoaSystem: : String String^systemstring=gcnewString((char*)orig); systemstring+=\"(System: : String)\"; Console: : WriteLine(\"{0}\",systemstring); deletesystemstring; } 输出 Hello,World! (_bstr_t) Hello,World! (char*) Hello,World! (wchar_t*) Hello,World! (CComBSTR) Hello,World! (CString) Hello,World! (basic_string) Hello,World! (System: : String) 从CComBSTR转换 示例 说明 此示例演示如何从CComBSTR转换为上面列出的其他字符串类型。 //convert_from_ccombstr.cpp //compilewith/clr/linkcomsuppw.lib #include #include #include #include\"atlbase.h\" #include\"atlstr.h\" #include\"comutil.h\" #include\"vcclr.h\" usingnamespacestd; usingnamespaceSystem; usingnamespaceSystem: : Runtime: : InteropServices; intmain() { CComBSTRorig(\"Hello,World! \"); CW2Aprintstr(orig); cout< //Converttoachar* constsize_tnewsize=100; charnstring[newsize]; CW2Atmpstr1(orig); strcpy_s(nstring,tmpstr1);[Page] strcat_s(nstring,\"(char*)\"); cout< //Converttoawchar_t* wchar_twcstring[newsize]; wcscpy_s(wcstring,orig); wcscat_s(wcstring,L\"(wchar_t*)\"); wcout< //Converttoa_bstr_t _bstr_tbstrt(orig); bstrt+=\"(_bstr_t)\"; cout< //ConverttoaCString CStringcstring(orig); cstring+=\"(CString)\"; cout< //Converttoabasic_string wstringbasicstring(orig); basicstring+=L\"(basic_string)\"; wcout< //ConverttoaSystem: : String String^systemstring=gcnewString(orig); systemstring+=\"(System: : String)\"; Console: : WriteLine(\"{0}\",systemstring); deletesystemstring; } 输出 Hello,World! (CComBSTR) Hello,World! (char*) Hello,World! (wchar_t*) Hello,World! (_bstr_t) Hello,World! (CString) Hello,World! (basic_string) Hello,World! (System: : String) 从CString转换 示例 说明 此示例演示如何从CString转换为上面列出的其他字符串类型。 //convert_from_cstring.cpp //compilewith
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 有关 数据类型 转换 大全