我有一個字符串,可以是以「0x」爲前綴的十六進制數字,也可以是除了可能爲負號外沒有特殊前綴的十進制數字。 「0x123」以16爲底,「-298」以10爲底。如何解析Python中的十六進制或十進制整數
如何在Python中將其轉換爲int或long?
我不想使用eval(),因爲它是不安全和過度殺傷的。
我有一個字符串,可以是以「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