std::字符串流十六进制转换错误
std::stringstream hex conversion error
我尝试使用std::stringstream
进行十六进制转换,如下所示:
std::stringstream s;
s << std::hex;
int i;
s << "100";
s >> i; // 256
s << "10"; // doesn't work
s >> i;
但正如评论所指出的,它在随后的转换中失败了。我需要重置stringstream
吗?为什么会失败?
您正在执行格式化输入,从字符串流中提取i后,设置eofbit。因此,您必须清除状态,否则以下所有格式化的输入/输出都将失败。
#include <sstream>
#include <iostream>
int main()
{
std::stringstream s;
s << std::hex;
int i;
s << "100";
s >> i; // 256
std::cout << i << 'n';
s.clear(); // clear the eofbit
s << "10";
s >> i; // 16
std::cout << i << 'n';
return 0;
}
如果在s << "10"
之后检查流状态,您将看到操作失败。我不知道确切的原因,但你可以通过重置流来解决这个问题:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream s;
s << std::hex;
int i;
s << "100";
s >> i; // 256
std::cout << i << 'n';
s.str("");
s.clear(); // might not be necessary if you check stream state above before and after extraction
s << "10"; // doesn't work
s >> i;
std::cout << i << 'n';
}
现场演示。
相关文章:
- C++使用params创建线程函数会导致转换错误
- 为什么g++在未执行的代码处标记强制转换错误
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 如何在构建对象堆栈时解决转换错误?
- 执行具有转换错误的过程
- 指向类成员函数的指针中存在类型转换错误
- 为什么我在这里收到C++没有已知的转换错误?
- 增加图形转换错误
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- 返回带有另一个类的数据成员的构造函数?遇到转换错误?
- 指针和双重转换错误,代码没有
- 自定义函数转换错误?
- 将 C 程序转换为具有大量字符* 和无符号字符转换错误的C++
- 如何在我使用过的Arduino库之一中固定构造函数中的转换错误
- 试图使用strCMP时的char转换错误
- 我在 TSP 的C++解决方案中遇到转换错误
- "double(*)(string, double, double)"尝试传递函数C++时"double"转换错误
- 此语法中的构造函数转换错误
- Opengl 精度转换错误编译错误 E0415
- 无效的转换错误和无效的类型