1

编辑:

我设法在较小的范围内解决了同样的问题:

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

这是为什么?

4

1 回答 1

3
hex >> std::hex >> caller;

将设置eofbithex,但随后

hex.str(str);

没有清除它。因此,以后的提取尝试hex将简单地失败。

呼叫hex.clear()hex.str(str);呼叫以清除标志。

于 2014-09-14T14:57:49.320 回答