vc++ 6.0 与VS 2010 下字符串与数字互换的不同写法

 vc++ 6.0 与VS 2010 下字符串与数字互换的不同写法
在这里,我们在一个对话框的窗口中做两个整数相加的运算。
我们建立了,m_plus ,m_bplus,m_result 三个控件分别存放加数,被加数,结果的值。
有一个“确定”的按钮 OnBnClickedOk()的函数用来统计两数相加的结果。
用到转换宏为:atoi 字符串转整数,itoa 整数转字符串 (注意两个程序对应的注释程序代码的区别)
void CouDlg::OnBnClickedOk()
{

CString CSPlus,CSBPlus;//定义字符串
m_plus.GetWindowText(CSPlus);
m_bplus.GetWindowText(CSBPlus);

int nPlus=atoi(CSPlus.GetBuffer(0));//字符串转整数
CSPlus.ReleaseBuffer();
int nBPlus=atoi(CSBPlus.GetBuffer(0));
CSBPlus.ReleaseBuffer();

int nResult=nPlus+nBPlus;
char chResult[128]={0};//定义字符数组
itoa(nResult,chResult,10);//整数转字符串
m_result.SetWindowText(chResult);
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
}
以上代码在vc++ 6.0能编译通过,但在vs 2010编译通不过,会报如下错误:
error C2664: “itoa”: 不能将参数 2 从“wchar_t [128]”转换为“char *”
error C2664: “CWnd::SetWindowTextA”: 不能将参数 1 从“wchar_t [128]”转换为“LPCTSTR”

究其原因是,1.vs 2010 默认字符集是使用 Unicode 字符集,而vc++ 6.0 没有Unicode 字符集
2.vc++ 6.0 char类型采用的是单字节存储形式,而vs 2010为了兼容发展,采用了2字节存储形式那么,在vs 2010中字符串与数字互换的写法是怎么样的呢,其实也简单,我们了解VS2010的char 的存储机制后,我们可用宽字节的宏来转换,即用wchar_t 代替 char 字义字符串 , 用_wtoi 字符串转整数,用_itow 整数转字符串就可以了,因此上述程序改为:
void CouDlg::OnBnClickedOk()
{

CString CSPlus,CSBPlus;
m_plus.GetWindowText(CSPlus);
m_bplus.GetWindowText(CSBPlus);

int nPlus=_wtoi(CSPlus.GetBuffer(0));//字符串转整数 以宽字节形式
CSPlus.ReleaseBuffer();
int nBPlus=_wtoi(CSBPlus.GetBuffer(0));
CSBPlus.ReleaseBuffer();

int nResult=nPlus+nBPlus;
wchar_t chResult[128]={0};};//定义字符数组
_itow(nResult,chResult,10);、、//整数转字符串 ,以宽字节形式
m_result.SetWindowText(chResult);
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
}
vs 2010 编译通过!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值