小心stringstream使用时的一个陷阱

前几天在调试程序时发现一个bug,和对stringstream的不当使用有关,代码如下:

char number = 0;

std::stringstream str_number;

str_number << number;

.....

这段代码的目标是把一个8位整数转换成一个字符串,但实际上不能达到这个效果。

如果在转换后加入打印信息:

std::cout << "the number is " << str_number.str() << "\n"

会打印出一个空字符串,而不是数字0。

问题出在number的类型是char上,stringstream 看到char类型,并不把它视作一个8位整数来对待,而是作为字符类型对待,

这样在保存过程中没有把对应的数字转换成ascii码,而是直接保存为0,这样就会得到一个以0为结尾的空字符串。

为了得到我们期望的结果,需要把代码改成:

str_no << (int) number;

对number做强制类型转换,使得stringstream把它看做一个整数,然后转换成对应的ascii码,这样就可以得到预期的结果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值