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

986 投票
10 回答
1369162 浏览
提问于 2025-04-11 09:27

我该怎么把一个十六进制字符串转换成整数呢?

"0xffff"   ⟶   65535
"ffff"     ⟶   65535

10 个回答

55

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

我可能会有这样的字符串 "0xffff" 或者仅仅是 "ffff"

要把一个字符串转换成整数,可以把这个字符串传给 int 函数,同时告诉它你要转换的进制。

这两种字符串都可以用这种方式进行转换:

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

int 自行判断

如果你把0作为进制传给 int,它会根据字符串前面的部分来判断进制。

>>> int(string_1, 0)
65535

如果没有十六进制的前缀 0x,那么 int 就没有足够的信息来猜测:

>>> int(string_2, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'

字面量:

如果你在源代码或者解释器中输入,Python会自动为你进行转换:

>>> integer = 0xffff
>>> integer
65535

但是 ffff 这样写是行不通的,因为Python会认为你在尝试写一个合法的Python名称:

>>> integer = ffff
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined

Python中的数字是以数字字符开头的,而Python名称不能以数字字符开头。

228

使用 int(hexstring, 16) 就可以解决这个问题,而且无论有没有0x前缀都可以正常工作:

>>> int("a", 16)
10
>>> int("0xa", 16)
10
1454

没有 0x 前缀的话,你需要明确告诉程序数字是哪个进制的,不然程序就不知道你在说什么:

x = int("deadbeef", 16)

有了 0x 前缀,Python 就能自动区分十六进制和十进制了:

>>> print(int("0xdeadbeef", 0))
3735928559
>>> print(int("10", 0))
10

(你 必须 指定 0 作为进制,这样程序才能猜测你用的是哪个前缀;如果你不加第二个参数,int() 默认会认为你用的是十进制。)

撰写回答