Используя std :: hex и std :: dec, можно разобрать шестнадцатеричное значение из строки и преобразовать его в десятичное число в C ++. Но что, если шестнадцатеричное число подписано?
Следующий код, например, даст 241, что правильно, если вход «F1» является шестнадцатеричным беззнаковым, но результат должен быть -15, если вход был шестнадцатеричным со знаком. Есть ли функция C ++, которая может обрабатывать шестнадцатеричные значения со знаком?
int n;
stringstream("F1") >> std::hex >> n;
std::cout << std::dec << "Parsing \"F1\" as hex gives " << n << '\n';
Когда вы говорите «подписанный гекс», вы имеете в виду, должны ли вы представлять побитовое представление char
в шестнадцатеричном тогда F1
было бы -15
, Тем не мение, -15
в подписанном гексе просто -F
,
Если вы хотите получить -15
из этого побитового представления вам нужно сделать что-то вроде следующего:
std::string szTest = "F1";
unsigned char chTest = std::stoi( szTest, nullptr, 16 );
char chTest2 = *reinterpret_cast<char*>(&chTest);
std::cout << szTest << ": " << static_cast<int>(chTest2) << std::endl;
return 0;
Других решений пока нет …