преобразование строки в hex в python
У меня есть скрипт, который вызывает функцию, которая принимает шестнадцатеричное число в качестве аргумента. Аргумент должен на префикс 0x. Источник данных является таблицей базы данных и хранится в виде строки, поэтому он возвращается "0x77". Я ищу способ взять строку из базы данных и использовать ее в качестве аргумента в шестнадцатеричной форме с префиксом 0x.
это работает:
addr = 0x77
value = class.function(addr)
запись базы данных должна быть строкой, так как большинство других записей не имеют шестнадцатеричных значений в этой колонке, но значения могут быть изменены, чтобы сделать его проще, поэтому вместо 0x77, это может быть '119'.
3 ответов
код class.function
ждет целое, который может быть представлен либо в десятичном или шестнадцатеричном литерал, так что эти два вызова полностью эквивалентны:
class.function(0x77)
class.function(119) # 0x77 == 119
даже print(0x77)
покажет 119
(поскольку decimal является представлением по умолчанию).
Итак, мы должны скорее говорить о преобразовании строкового представления до целое. Строка может быть шестнадцатеричным представлением, например "0x77" , а затем анализировать это с базовым параметром:
>>> int('0x77', 16)
119
или десятичный, затем разберите его как int('119')
.
тем не менее, хранение integer всякий раз, когда вы имеете дело с целыми числами, лучше.
EDIT: как предложил @gnibbler, вы можете анализировать как int(x, 0)
, который обрабатывает оба формата.
>>> hex(119)
'0x77'
#or:
>>> hex(int("119"))
'0x77'
Это должно работать для вас.
вы также можете получить шестнадцатеричное представление символов:
>>> hex(ord("a"))
'0x61'
Я думаю, вы говорите, что читаете строку из базы данных и хотите преобразовать ее в целое число, если строка имеет префикс 0x, вы можете преобразовать ее так:
>>> print int("0x77", 16)
119
Если это не:
>>> print int("119")
119