簡體   English   中英

以下代碼段如何工作?

[英]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_evalint

>>> import ast
>>> ast.literal_eval("0xaf")
175
>>> int("af", 16)
175

哪個是安全的並產生相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM