如何在Python中解析十六进制或十进制int

how to parse hex or decimal int in Python

本问题已经有最佳答案,请猛点这里访问。

我有一个字符串,它可以是一个以"0x"为前缀的十六进制数字,也可以是一个不带特殊前缀的十进制数字,除了可能的减号之外。0x123"在16基,-298"在10基。

如何在Python中将其转换为int或long?

我不想使用eval(),因为它不安全而且杀伤力太强。


1
int("0x123", 0)

(为什么int("0x123")不这么做?)


以16到10为基数(返回整数):

1
2
>>> int('0x123', 16)
291

以10到16为基数(返回字符串):

1
2
>>> hex(291)
'0x123'


像这样的东西可能是你要找的。

1
2
3
4
5
6
7
def convert( aString ):
    if aString.startswith("0x") or aString.startswith("0X"):
        return int(aString,16)
    elif aString.startswith("0"):
        return int(aString,8)
    else:
        return int(aString)


如果您在不同的数字系统之间进行了大量的切换,那么位串库可以使许多二进制/十六进制操作变得更容易。它还支持字符串解释:

http://pythonhosted.org/bitstring/


这是一个简单的版本,工作起来很有魅力。返回字符串,因为hex()返回相同的类型:

1
def itoh(int): return hex(int)[2:]