Преобразовать строку в 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