我是python的新手,正在通过Donour Sizemore为ELM327设计的名为pyOBD的开源项目(不确定,可以针对更多的scantool设备)。我可以确定以下是一种转换十六进制值的方法到int。但是它如何工作?特别是其中带有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


这是安全的,并产生相同的结果。

关于python - 以下代码段如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18409953/

10-16 17:30