Как преобразовать 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'