Как распечатать целое число со знаком как шестнадцатеричное число в дополнении two с Python?

У меня есть отрицательное целое число (4 байта) которого я хотел бы иметь шестнадцатеричную форму дополнительного представления его two.

>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'

Но я хотел бы видеть "FF..."

8
задан none 13 July 2010 в 08:49
поделиться

4 ответа

Вот способ (для 16-битных чисел):

>>> x=-123
>>> hex(((abs(x) ^ 0xffff) + 1) & 0xffff)
'0xff85'

(Возможно, не самый элегантный способ)

5
ответ дан 5 December 2019 в 11:22
поделиться
>>> x = -123
>>> bits = 16
>>> hex((1 << bits) + x)
'0xff85'
>>> bits = 32
>>> hex((1 << bits) + x)
'0xffffff85'
4
ответ дан 5 December 2019 в 11:22
поделиться

Использование модуля битовой строки :

>>> bitstring.BitArray('int:32=-312367').hex
'0xfffb3bd1'
3
ответ дан 5 December 2019 в 11:22
поделиться

Модуль 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'
>>> 
0
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: