Скажем, у меня есть классическое 4-байтовое целое число со знаком, и мне нужно что-то вроде
print hex(-1)
дать мне что-то вроде
0xffffffff
На самом деле вышесказанное дает мне -0x1. Я бездельничал на каком-то языке более низкого уровня, а командная строка Python выполняется быстро и легко.
Итак .. есть способ сделать это?






Это поможет:
>>> 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 (), благодаря Игнасио и bobince:
def hex2(n):
return "0x%x"%(n&0xffffffff)
def hex3(n):
return "0x%s"%("00000000%x"%(n&0xffffffff))[-8:]
Включил комментарий и опцию Ignacios ниже в принятый ответ (и дал Игнасио положительный голос)
Попробуйте эту функцию:
'%#4x' % (-1 & 0xffffffff)
"0x {: 04x}". Format ((int (my_num) & 0xFFFF), '04x'), где my_num - необходимое число
Не полагайтесь на суффикс 'L', он исчез в Python 3.0, поэтому hex2 отрежет цифру. Оператор форматирования% x обычно лучше, чем hex ().