Как получить шестнадцатеричную строку из целого числа со знаком

Скажем, у меня есть классическое 4-байтовое целое число со знаком, и я хочу что-то вроде

print hex (-1)

чтобы дать мне что-то вроде

→ 0xffffffff

В действительности вышеизложенное дает мне -0x1. Я плохо разбираюсь в языке на более низком уровне, а командная строка python очень проста.

Итак, есть ли способ сделать это?

Ответ 1

Это сделает трюк:

>>> print hex (-1 & 0xffffffff)
0xffffffffL

или, в форме функции (и снятия конечного "L" ):

>>> def hex2(n):
...     return hex (n & 0xffffffff)[:-1]
...
>>> print hex2(-1)
0xffffffff
>>> print hex2(17)
0x11

или, вариант, который всегда возвращает фиксированный размер (может быть, лучший способ сделать это):

>>> def hex3(n):
...     return "0x%s"%("00000000%s"%(hex(n&0xffffffff)[2:-1]))[-8:]
...
>>> print hex3(-1)
0xffffffff
>>> print hex3(17)
0x00000011

Или, избегая hex() вообще, благодаря Ignacio и bobince:

def hex2(n):
    return "0x%x"%(n&0xffffffff)

def hex3(n):
    return "0x%s"%("00000000%x"%(n&0xffffffff))[-8:]

Ответ 2

Попробуйте эту функцию:

'%#4x' % (-1 & 0xffffffff)

Ответ 3

"0x {: 04x}". format ((int (my_num) и 0xFFFF), '04x'), где my_num - требуемое число