2

在 Z3 Python 中,要提取 BitVector V 的 8 位,我们可以执行以下操作:

Extract(7, 0, V)

但是,有时在我的程序中,V 可以是一个常数,所以在这种情况下,代码实际上是这样的:

Extract(7, 0, 0x87654)

不幸的是,这是错误的,因为上面的代码没有指定 0x87654 是 32 位 BitVector.7

一种解决方案是创建一个临时变量,例如:

tmp = BitVec('tmp', 32)
tmp == 0x87654
Extract(7, 0, tmp)

但是,这有点麻烦,因为我必须创建一个临时的才能工作。我想知道是否有另一种方法而不必创建临时变量?有没有办法在我的代码中将 0x87654 转换为 BitVector 内联?

非常感谢。

4

1 回答 1

4

我想你想使用BitVecVal(value, bits)

Extract(7, 0, BitVecVal(0x87654, 32))

这是 API 描述:http ://research.microsoft.com/en-us/um/redmond/projects/z3/z3.html#-BitVecVal

于 2013-05-09T14:50:42.757 回答