Как вывести Hex из 2's complement силами Python?
Есть такая задача: Есть ID-шник: 10088363095792553999 Его hex очень даже легко найти: 0x8C0110C901E0100F. Получить эти данные тоже легко силами python:
value = 10088363095792553999
hex_value = hex(value) # 0x8c0110c901e0100f
Онлайн калькулятор подсказывает, что из Hex'a его 2's complement будет "-8358380977916997617". Не знаю, можно ли тут выкладывать ссылки на сторонние ресурсы, но конвертер легко найти в гугле по запросу "Hexadecimal to Decimal converter". Есть пробел: я не знаю, как питоном вывести из Хекса его 2's complement. НО! Что самое тут нужное, это обратная операция: необходимо из значения его 2's complement (-8358380977916997617) силами Python получить обратно его хекс - 0x8c0110c901e0100f. Возможно ли это?
Ответы (1 шт):
Вопрос уже довольно подробно раскрыт здесь.
Приведу рабочее решение для вашего примера:
def twos_complement(n, w):
if n & (1 << (w - 1)):
n = n - (1 << w)
return n
def int2hex(number, bits):
if number < 0:
return hex((1 << bits) + number)
return hex(number)
hex_value = '0x8c0110c901e0100f'
value = twos_complement(int(hex_value, 16), 64)
print(value) # -8358380977916997617
print(int2hex(value, 64)) # 0x8c0110c901e0100f