От шестнадцатеричного до десятичного знака в переполнении стека

Используя 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';

0

Решение

Когда вы говорите «подписанный гекс», вы имеете в виду, должны ли вы представлять побитовое представление 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;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]