Как преобразовать int в шестнадцатеричную строку?



Я хочу взять целое число (который будет


например: я хочу пройти в 65 и выйти 'x41' или 255 и вам 'xff'.



Я пробовал делать это с помощью тега struct.pack('c',65), но это дроссели на что-нибудь выше 9 так как он хочет взять в одну строку символов.

656   11  

11 ответов:

вы ищете

это преобразует целое число в 2-значную шестнадцатеричную строку с префиксом 0x:

strHex = "0x%0.2X" % 255

А как же hex()?

hex(255)  # 0xff

если вы действительно хотите иметь \ впереди вы можете сделать:

print '\' + hex(255)[1:]

попробуй:

"0x%x" % 255 # => 0xff

или

"0x%X" % 255 # => 0xFF

документация Python говорит: "Держите это под подушкой:http://docs.python.org/library/index.html"

позвольте мне добавить это, потому что иногда вы просто хотите однозначное представление:

'{:x}'.format(15)
> f

а теперь с новым f'' формат строки вы можете сделать:

f'{15:x}'
> f

Примечание: начальная 'f' в f'{15:x}' - это для обозначения формата строки

Если вы хотите упаковать структуру со значением формат B вместо c. C преобразует символ в строку (что само по себе не слишком полезно), А B преобразует целое число.

struct.pack('B', 65)

(и да, 65-это \x41, а не \x65.)

класс struct также будет удобно обрабатывать endianness для связи или других целей.

обратите внимание, что для больших значений hex() все еще работает (некоторые другие ответы не делают):

x = hex(349593196107334030177678842158399357)
print(x)

Python 2:0x4354467b746f6f5f736d616c6c3f7dL
Python 3:0x4354467b746f6f5f736d616c6c3f7d

для расшифрованного сообщения RSA можно сделать следующее:

import binascii

hexadecimals = hex(349593196107334030177678842158399357)

print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3

Я хотел, чтобы случайное целое число было преобразовано в шестизначную шестнадцатеричную строку с # в начале. Чтобы получить это я использовал

"#%6x" % random.randint(0xFFFFFF)

это сработало лучше всего для меня

"0x%02X" % 5  # => 0x05
"0x%02X" % 17 # => 0x11

измените (2), Если вы хотите число с большей шириной (2 для 2 шестигранных печатных символов), поэтому 3 даст вам следующее

"0x%03X" % 5  # => 0x005
"0x%03X" % 17 # => 0x011

в качестве альтернативного представления можно использовать

[in] '%s' % hex(15)
[out]'0xf'

С format() на , мы можем сделать:

>>> # format also supports binary numbers
>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)
'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'

Comments

    Ничего не найдено.