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

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

print hex(-1)

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

0xffffffff

На самом деле вышесказанное дает мне -0x1. Я бездельничал на каком-то языке более низкого уровня, а командная строка Python выполняется быстро и легко.

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
16
0
18 061
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это поможет:

>>> 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:]

Не полагайтесь на суффикс 'L', он исчез в Python 3.0, поэтому hex2 отрежет цифру. Оператор форматирования% x обычно лучше, чем hex ().

bobince 23.10.2008 11:37

Включил комментарий и опцию Ignacios ниже в принятый ответ (и дал Игнасио положительный голос)

paxdiablo 23.10.2008 15:56

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

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

"0x {: 04x}". Format ((int (my_num) & 0xFFFF), '04x'), где my_num - необходимое число

Другие вопросы по теме