1

我是 python 新手,正在通过 Donour Sizemore 为 ELM327 开发一个名为 pyOBD 的开源项目(不太确定,可能针对更多扫描工具设备)。我可以看出以下是转换十六进制值的方法到 int.But 它是如何工作的?特别是其中的行eval

 def hex_to_int(str):
     i = eval("0x" + str, {}, {})
     return i
4

1 回答 1

4

eval像运行 Python 代码一样运行字符串,然后输出结果。

在这种情况下,它运行类似 的东西0xaf,这是一种指定十六进制文字的方式,并输出结果整数。尝试0xaf在 Python 解释器中输入,你会得到一个整数作为结果。

eval在不受信任的输入上使用是不安全的。例如,

eval("0xa and __import__('os').remove('some/file/path')")

可以删除系统上的文件。

最好使用ast.literal_evalor int

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

哪些是安全的并产生相同的结果。

于 2013-08-23T19:05:06.107 回答