我是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_eval
或int
:>>> import ast
>>> ast.literal_eval("0xaf")
175
>>> int("af", 16)
175
这是安全的,并产生相同的结果。
关于python - 以下代码段如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18409953/