如何解析Python中的十六进制或十进制整数
问题描述:
我有一个字符串,可以是以“0x”为前缀的十六进制数字,也可以是除了可能为负号外没有特殊前缀的十进制数字。 “0x123”以16为底,“-298”以10为底。如何解析Python中的十六进制或十进制整数
如何在Python中将其转换为int或long?
我不想使用eval(),因为它是不安全和过度杀伤的。
答
int("0x123", 0)
(为什么不int("0x123")
做呢?)
答
像这样的东西可能是你在找什么。
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)
答
基16至10(返回一个整数):
>>> int('0x123', 16)
291
基10至16(返回字符串):
>>> hex(291)
'0x123'
答
这是一个简单的版本,其工作方式类似于一个魅力。 返回字符串自十六进制()返回相同的类型:
def itoh(int): return hex(int)[2:]
为什么eval不安全?邪恶的人会将代码隐藏到这些数字中吗?谁有权访问这些字符串?他们不值得信赖吗? – 2009-03-02 22:12:58
eval是不安全的,因为它允许执行任意代码。如果您从可信来源获取字符串,它仍然是不安全的,只是发生在您依赖此可信来源而不能利用此信息的情况下。如果你总是控制着弦,为什么它是弦? – 2009-03-02 22:17:35
您的python程序以源代码形式提供 - 也是“任意代码”。为什么要在一组Python源代码和另一个Python源代码之间划一条线? Eval不会比首先运行Python程序安全。 – 2009-03-02 22:20:12