Відповіді:
Ви шукаєте 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' in
f'{15:x}'означає позначення рядка формату
Якщо ви хочете упакувати структуру зі значенням <255 (один байт без підпису, uint8_t) і закінчити рядок з одним символом, ви, ймовірно, шукаєте формат B замість c . C перетворює символ у рядок (не надто корисний сам по собі), а B перетворює ціле число.
struct.pack('B', 65)
(І так, 65 - це \ x41, а не \ x65.)
Клас Stru також буде зручно обробляти нестабільність для спілкування чи іншого використання.
Зауважте, що для великих значень 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
Це працювало найкраще для мене
"0x%02X" % 5 # => 0x05
"0x%02X" % 17 # => 0x11
Змініть (2), якщо ви хочете, щоб число було більшою шириною (2 призначено для друкованих символів з двома шестигранними знаками), тому 3 дасть вам наступне
"0x%03X" % 5 # => 0x005
"0x%03X" % 17 # => 0x011
Я хотів, щоб випадкове ціле число перетворилося на шестицифровий шістнадцятковий рядок із символом # на початку. Щоб отримати це, я використав
"#%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ми його видалили.