c ++ std :: istringstream怪异的std :: hex行为

时间:2014-09-14 14:34:06

标签: c++ hex istringstream

修改

我设法在较小的范围内得到同样的问题:

std::istringstream hex;
std::string str = "0x7ffa428ab946";
std::cout << "str " << str << std::endl;
hex.str(str);
long caller;
hex >> std::hex >> caller;
std::cout << "caller " << caller << std::endl;
str = "0x7ff9ec0010f0";
std::cout << "str " << str << std::endl;
hex.str(str);
long address;
hex >> std::hex >> address;
std::cout << "address " << address << std::endl;

得到这个:

str 0x7ffa428ab946
caller 140712834939206
str 0x7ff9ec0010f0
address 0

为什么会这样?

1 个答案:

答案 0 :(得分:2)

hex >> std::hex >> caller;

会在eofbit上设置hex,但后续

hex.str(str);

不清楚。因此,稍后从hex中提取的尝试将失败。

hex.clear()通话后拨打hex.str(str);以清除标记。