前几天在调试程序时发现一个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码,这样就可以得到预期的结果了。