我正在尝试将一个十六进制的stringstream转换为long类型。我来这里求助,但是他们给出的解决方案(对于short、int和大多数long类型有效)对于需要至少16个十六进制数字表示的负long类型无效。
基本上,我有一个名为hx
的stringstream,其中填充了应该等于-9223372036854775808
的十六进制数字。
#include <iostream>
#include <sstream>
#include <climits>
using namespace std;
int main() {
stringstream hx;
hx << hex << LONG_MIN;
cout << hx.str() << '\n';
long value;
hx >> value;
cout << value << '\n';
return 0;
}
实际输出:
8000000000000000
9223372036854775807
预期输出:
8000000000000000
-9223372036854775808
当符号位为1时,我不明白为什么十六进制值会被转换成正数。
LONG_MIN
转换为unsigned long
,否则行为是未定义的。 - xskxzrLONG_INT
作为long
传递。printf
不会对其参数执行转换,如果类型不匹配,则会导致未定义的行为。 - xskxzr