[英]How does the following code snippet work?
我是python的新手,我正在通過Donour Sizemore為ELM327進行一個名為pyOBD的開源項目(不太確定,可能針對更多的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
哪個是安全的並產生相同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.