我是python的新手,並且正在通過一個名爲python的開源項目,由Donour Sizemore爲ELM327(不太確定,可能針對更多scantool設備)。我可以看出,以下是一種轉換十六進制值爲int.But它是如何工作的?特別是其中的eval
。以下代碼片段如何工作?
def hex_to_int(str):
i = eval("0x" + str, {}, {})
return i
我是python的新手,並且正在通過一個名爲python的開源項目,由Donour Sizemore爲ELM327(不太確定,可能針對更多scantool設備)。我可以看出,以下是一種轉換十六進制值爲int.But它是如何工作的?特別是其中的eval
。以下代碼片段如何工作?
def hex_to_int(str):
i = eval("0x" + str, {}, {})
return i
eval
運行一個字符串就好像它是Python代碼,然後輸出結果。
在這種情況下,它運行類似0xaf
這是一種指定十六進制文字的方式,並輸出結果整數。嘗試在Python解釋器中輸入0xaf
,您將得到一個整數作爲結果。
eval
在不受信任的輸入上使用是不安全的。例如,
eval("0xa and __import__('os').remove('some/file/path')")
可能會刪除系統中的文件。
這將是更好地使用ast.literal_eval
或int
:
>>> import ast
>>> ast.literal_eval("0xaf")
175
>>> int("af", 16)
175
哪些是安全的,併產生相同的結果。
噢好吧..這沒有回答爲什麼代碼是否定的...但十六進制值如何轉換爲整數值? –
@JaneLove由於Python將0xaf識別爲有效的Python代碼,並運行它。嘗試在Python解釋器中輸入 - 你會得到一個整數作爲輸出。 – agf
這是非常非常糟糕的代碼。不要試圖從中吸取教訓。 –
也許你可以在http://codereview.stackexchange.com上詢問 – 2013-08-23 19:01:58
我其實很勉強。我並不經常在代碼中畏縮。 – roippi