У меня есть отрицательное целое число (4 байта) которого я хотел бы иметь шестнадцатеричную форму дополнительного представления его two.
>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'
Но я хотел бы видеть "FF..."
Вот способ (для 16-битных чисел):
>>> x=-123
>>> hex(((abs(x) ^ 0xffff) + 1) & 0xffff)
'0xff85'
(Возможно, не самый элегантный способ)
>>> x = -123
>>> bits = 16
>>> hex((1 << bits) + x)
'0xff85'
>>> bits = 32
>>> hex((1 << bits) + x)
'0xffffff85'
Использование модуля битовой строки :
>>> bitstring.BitArray('int:32=-312367').hex
'0xfffb3bd1'
Модуль struct
выполняет преобразования между значениями Python и структурами C, представленными в виде объектов Python bytes. Упакованный объект bytes предоставляет доступ к отдельным значениям байтов.
Это можно использовать для отображения целочисленного представления, лежащего в основе (C).
>>> packed = struct.pack('>i',i) # big-endian integer
>>> type(packed)
<class 'bytes'>
>>> packed
b'\xff\xfb;\xd1'
>>> "%X%X%X%X" % tuple(packed)
'FFFB3BD1'
>>>