C++中数据类型的转换

在C++中有很多的数据类型,在编程的时候,对数据类型进行转换很常遇到的,我在次进行分类,欢迎大家跟贴,想出更好的方法。
我也会陆续增加一些。『有些资料来自互联网,在对此表示感谢!』

None.gif 1、如何将CString变量转换为int变量
None.gif2、如何将int变量转换CString为变量
None.gifCString ss="1212.12"; 
None.gifint temp=atoi(ss); 
None.gifCString aa; 
None.gifaa.Format("%d",temp); 
None.gif


None.gif 3、CString转换为Double
None.gif4、Double转换为CString
None.gifCString strValue("1.234"); 
None.gifdouble dblValue;  
None.gifdblValue = atof((LPCTSTR)strValue); 

None.gif 5、char*转换成CString
None.gifchar chArray[] = "This is a test";
None.gifchar * p = "This is a test"; 
None.gifLPSTR p = "This is a test";
None.gifTCHAR * p = _T("This is a test"); 
None.gifLPTSTR p = _T("This is a test");
None.gif
None.gifCString theString = chArray;
None.giftheString.Format(_T("%s"), chArray);
None.giftheString = p; 


None.gif 6、CString转换成char*
None.gif  若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
None.gif
None.gif方法一,使用强制转换。例如:
None.gif
None.gifCString theString( "This is a test" );
None.gifLPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;  
None.gif
None.gif方法二,使用strcpy。例如:
None.gif
None.gifCString theString( "This is a test" );
None.gifLPTSTR lpsz = new TCHAR[theString.GetLength()+1];
None.gif_tcscpy(lpsz, theString); 
None.gif
None.gif  需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
None.gif
None.gif方法三,使用CString::GetBuffer。例如:
None.gif
None.gifCString s(_T("This is a test "));
None.gifLPTSTR p = s.GetBuffer();
None.gif// 在这里添加使用p的代码
None.gifif(p != NULL) *p = _T('\0');
None.gifs.ReleaseBuffer(); 
None.gif// 使用完后及时释放,以便能使用其它的CString成员函数 
None.gif


None.gif 7、BSTR转换成char*
None.gif
None.gif方法一,使用ConvertBSTRToString。例如:
None.gif
None.gif#include 
None.gif#pragma comment(lib, "comsupp.lib")
None.gifint _tmain(int argc, _TCHAR* argv[]){
None.gifBSTR bstrText = ::SysAllocString(L"Test");
None.gifchar* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
None.gifSysFreeString(bstrText); // 用完释放
None.gifdelete[] lpszText2;
None.gifreturn 0;
None.gif}  
None.gif
None.gif方法二,使用_bstr_t的赋值运算符重载。例如:
None.gif
None.gif_bstr_t b = bstrText;
None.gifchar* lpszText2 = b; 
None.gif


None.gif 8、char*转换成BSTR
None.gif
None.gif  方法一,使用SysAllocString等API函数。例如:
None.gif
None.gifBSTR bstrText = ::SysAllocString(L"Test");
None.gifBSTR bstrText = ::SysAllocStringLen(L"Test",4);
None.gifBSTR bstrText = ::SysAllocStringByteLen("Test",4); 
None.gif
None.gif  方法二,使用COleVariant或_variant_t。例如:
None.gif
None.gif//COleVariant strVar("This is a test");
None.gif_variant_t strVar("This is a test");
None.gifBSTR bstrText = strVar.bstrVal; 
None.gif
None.gif  方法三,使用_bstr_t,这是一种最简单的方法。例如:
None.gif
None.gifBSTR bstrText = _bstr_t("This is a test"); 
None.gif
None.gif  方法四,使用CComBSTR。例如:
None.gif
None.gifBSTR bstrText = CComBSTR("This is a test"); 
None.gif
None.gif  或
None.gif
None.gifCComBSTR bstr("This is a test");
None.gifBSTR bstrText = bstr.m_str; 
None.gif
None.gif  方法五,使用ConvertStringToBSTR。例如:
None.gif
None.gifchar* lpszText = "Test";
None.gifBSTR bstrText = _com_util::ConvertStringToBSTR(lpszText); 
None.gif


None.gif 9、CString转换成BSTR
None.gif
None.gif  通常是通过使用CStringT::AllocSysString来实现。例如:
None.gif
None.gifCString str("This is a test");
None.gifBSTR bstrText = str.AllocSysString();
None.gif
None.gifSysFreeString(bstrText); // 用完释放  
None.gif
None.gif10、BSTR转换成CString
None.gif
None.gif  一般可按下列方法进行:
None.gif
None.gifBSTR bstrText = ::SysAllocString(L"Test");
None.gifCStringA str;
None.gifstr.Empty();
None.gifstr = bstrText;  
None.gif
None.gif  或
None.gif
None.gifCStringA str(bstrText);
None.gif

None.gif 11、ANSI、Unicode和宽字符之间的转换
None.gif
None.gif  方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。
None.gif
None.gif  方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:
None.gif
None.gifTCHAR tstr[] = _T("this is a test");
None.gifwchar_t wszStr[] = L"This is a test";
None.gifString* str = S”This is a test”; 
None.gif
None.gif  方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式:
None.gif
None.gif  其中,第一个C表示“类”,以便于ATL 3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面是一些示例代码:
None.gif
None.gifLPTSTR tstr= CA2TEX
< 16 > ("this is a test");
None.gifLPCTSTR tcstr= CA2CT("this is a test");
None.gifwchar_t wszStr[] = L"This is a test";
None.gifchar* chstr = CW2A(wszStr);  
None.gif

转载于:https://www.cnblogs.com/mjgforever/archive/2006/05/23/407245.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值