在Python中将十六进制字符串转换为整数
我该怎么把一个十六进制字符串转换成整数呢?
"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()
默认会认为你用的是十进制。)