Я пытаюсь преобразовать поток строк в шестнадцатеричном формате в длинный. Я пришел сюда за помощью, и решение, которое они дали (работает для коротких, целых и большинства длинных), не работает для отрицательных длинных, для представления которых требуется минимум 16 шестнадцатеричных цифр.
По сути, у меня есть поток строк с именем hx
, который я заполнил шестнадцатеричными цифрами, которые должны быть равны -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.