Ответы:
Вы ищете chr
функцию.
Вы, кажется, смешиваете десятичные представления целых чисел и шестнадцатеричные представления целых чисел, поэтому не совсем понятно, что вам нужно. Основываясь на описании, которое вы дали, я думаю, что один из этих фрагментов показывает, что вы хотите.
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
Обратите внимание, что это сильно отличается от строки, содержащей целое число в шестнадцатеричном виде . Если это то, что вы хотите, используйте hex
встроенный.
chr
вообще не включает ASCII - он просто берет число и создает однобайтовую строку байтов, где порядковый номер байта - это число. ASCII и ASCII-совместимые кодировки вступают в игру, когда вы пишете и отображаете строки байтов.
'A'
другой способ писать и отображать '\x41'
. Все str
действительно волнует тот факт, что это шестьдесят пять. Чтобы сделать вещи понятными и полезными для людей, он часто становится А.
Как насчет hex()
?
hex(255) # 0xff
Если вы действительно хотите быть \
впереди, вы можете сделать:
print '\\' + hex(255)[1:]
repr(chr(255)) # '\xff'
также добивается этого
Пытаться:
"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}'
должна означать строку формата
Если вы хотите упаковать структуру со значением <255 (один байт без знака, uint8_t) и в итоге получить строку из одного символа, вы, вероятно, ищете формат B вместо c . C преобразует символ в строку (сама по себе она не слишком полезна), а B преобразует целое число.
struct.pack('B', 65)
(И да, 65 - это \ x41, а не \ x65.)
Класс struct также будет удобно обрабатывать порядок байтов для связи или других целей.
Обратите внимание, что для больших значений 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)
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Существует не хватает , %
прежде чем 6
и randint
принимает 2 параметра : -Более и верхняя bounds-)
С 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'
(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'
Также вы можете конвертировать любое число в любой базе в гекс. Используйте этот однострочный код здесь легко и просто:
hex(int(n,x)).replace("0x","")
У вас есть строка, n
которая является вашим номером и x
основанием этого числа. Сначала измените его на целое, а затем на шестнадцатеричное, но гекс имеет 0x
в начале, поэтому replace
мы удалим его.