Печать переменной в шестнадцатеричном формате в Python
Я пытаюсь найти способ распечатать строку в шестнадцатеричном формате. Например, у меня есть эта строка, которую я затем преобразую в ее шестнадцатеричное значение.
my_string = "deadbeef"
my_hex = my_string.decode('hex')
как я могу печатать my_hex
as 0xde 0xad 0xbe 0xef
?
чтобы прояснить мой вопрос... Предположим, у меня есть некоторые данные, такие как 0x01, 0x02, 0x03, 0x04
хранящиеся в переменной. Теперь мне нужно напечатать его в шестнадцатеричном формате, чтобы я мог его прочитать. Думаю, я ищу эквивалент Python printf("%02x", my_hex)
. Я знаю, что есть print '{0:x}'.format()
, но это не будет работать с my_hex
и он также не будет заполняться нулями.
6 ответов
вы имеете в виду, что у вас есть строка байт на my_hex
который вы хотите распечатать как шестнадцатеричные числа, верно? Например, из вашего примера:
>>> my_string = "deadbeef"
>>> my_hex = my_string.decode('hex') # python 2 only
>>> print my_hex
Þ ¾ ï
вот один из способов сделать это:
>>> print " ".join(hex(ord(n)) for n in my_hex)
0xde 0xad 0xbe 0xef
понимание разбивает строку на байты,ord()
преобразовывает каждый байт в соответствующее целое число, а hex()
форматирует каждое целое число в from 0x##
. Затем мы добавляем промежутки между ними.
бонус: Если вы используете этот метод со строками unicode, понимание даст вам символы юникода (не байты), и вы получите соответствующие шестнадцатеричные значения, даже если они больше двух цифр.
преобразуйте строку в целочисленную базу 16, затем в шестнадцатеричную.
print hex(int(string, base=16))
это встроенные функции.
http://docs.python.org/2/library/functions.html#int
пример
>>> string = 'AA'
>>> _int = int(string, base=16)
>>> _hex = hex(_int)
>>> print _int
170
>>> print _hex
0xaa
>>>
вы можете попробовать что-то вроде этого, я думаю:
new_str = ""
str_value = "rojbasr"
for i in str_value:
new_str += "0x%s " % (i.encode('hex'))
print new_str
ваш вывод будет примерно таким:
0x72 0x6f 0x6a 0x62 0x61 0x73 0x72
способ, который приведет к сбою, если ваша входная строка не является допустимыми парами шестнадцатеричных символов...:
>>> import binascii
>>> ' '.join(hex(ord(i)) for i in binascii.unhexlify('deadbeef'))
'0xde 0xad 0xbe 0xef'
использовать
print " ".join("0x%s"%my_string[i:i+2] for i in range(0, len(my_string), 2))
такой:
>>> my_string = "deadbeef"
>>> print " ".join("0x%s"%my_string[i:i+2] for i in range(0, len(my_string), 2))
0xde 0xad 0xbe 0xef
>>>
на несвязанной боковой ноте ... используя string
как имя переменной даже в качестве примера имя переменной очень плохая практика.
другой ответ с более поздним стилем печати / формата:
res[0]=12
res[1]=23
print("my num is 0x{0:02x}{1:02x}".format(res[0],res[1]))