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

Я хочу взять целое число (которое будет <= 255) в шестнадцатеричное представление строки

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

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

Ответ 1

Вы ищете функцию chr.

Кажется, вы смешиваете десятичные представления целых чисел и шестнадцатеричных представлений целых чисел, поэтому не совсем ясно, что вам нужно. Основываясь на описании, которое вы дали, я думаю, что один из этих фрагментов показывает, что вы хотите.

>>> chr(0x65) == '\x65'
True


>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True

Обратите внимание, что это сильно отличается от строки, содержащей целое число как hex. Если это то, что вы хотите, используйте встроенный hex.

Ответ 2

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

strHex = "0x%0.2X" % 255

Ответ 3

Как насчет hex()?

hex(255)  # 0xff

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

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

Ответ 4

Try:

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

или

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

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

Ответ 5

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

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

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

f'{15:x}'
> f

ПРИМЕЧАНИЕ: начальное 'f' в f'{15:x}' должно означать строку формата

Ответ 6

Если вы хотите упаковать структуру со значением < 255 (один байт unsigned, uint8_t) и в итоге получить строку из одного символа, вы, вероятно, ищете формат B вместо c. C преобразует символ в строку (не слишком полезный сам по себе), а B преобразует целое число.

struct.pack('B', 65)

(И да, 65 -\x41, а не \x65.)

Класс struct также будет удобно обрабатывать сущность для связи или другого использования.

Ответ 7

Обратите внимание, что для больших значений 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

Ответ 8

Это сработало лучше для меня

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

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

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

Ответ 9

Мне понадобилось случайное целое число, преобразованное в шестизначную шестую строку С# в начале. Для этого я использовал

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

Ответ 10

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

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

Ответ 11

С 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'

Ответ 12

(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()

Например:

>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'