在Python中将字符串转换为十六进制

13

我有一个脚本,调用一个函数并将一个十六进制数作为参数传递。参数需要使用0x前缀。数据源是数据库表格,以字符串形式存储,因此返回值为'0x77'。我正在寻找一种方法,将数据库中的字符串以十六进制形式带有0x前缀作为参数。

这个可以工作:

addr = 0x77
value = class.function(addr)

数据库条目必须是字符串,因为该列中大多数其他记录没有十六进制值,但可以更改这些值以使其更容易,所以 '0x77' 可以更改为 '119'。


class.function(119)class.function(0x77) 是完全等价的调用。 - bereal
3个回答

14

你的 class.function 函数需要一个可以用十进制或十六进制字面量表示的 整数,所以这两个调用是完全等价的:

class.function(0x77)
class.function(119)  # 0x77 == 119

即使 print(0x77) 会显示 119(因为十进制是默认表示)。

所以,我们应该谈论的是将字符串表示转换为 整数。字符串可以是十六进制表示,例如 '0x77',然后使用基本参数解析它:

 >>> int('0x77', 16)
 119

如果是整数,直接存储为整数,如果是十进制的字符串,则将其解析为 int('119')

然而,处理整数时最好始终存储为整数。

编辑:根据 @gnibbler 的建议,您可以使用 int(x, 0) 进行解析,它可以同时处理这两种格式。


3
如果你在 int 函数的第二个参数中使用 0,它会正确地转换十进制和十六进制值。 - John La Rooy
@gnibbler 真不错。天啊,那在文档中就有,这是我第一次听说! - bereal

8
>>> hex(119)
'0x77'
#or:
>>> hex(int("119"))
'0x77'

这应该适用于您。

您还可以获取字符的十六进制表示:

>>> hex(ord("a"))
'0x61'

1

我认为您是在说您从数据库读取了一个字符串,并希望将其转换为整数,如果该字符串具有0x前缀,则可以这样转换:

>>> print int("0x77", 16)
119

如果它不这样做:

>>> print int("119")
119

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接