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