Відповіді:
Ви шукаєте 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
ми його видалили.