将int转换为bitvec时出现z3py错误

时间:2015-04-20 19:43:32

标签: z3 z3py

从(Z3: Is it possible to sum up a BitVec and a Real?),我尝试使用

将int转换为bitvec
x = Int('x')
reg = BitVecRef(Z3_mk_int2bv(BitVecVal(x.ctx_ref(), 16, x)), x.ctx)

但我总是收到一个错误说" '阿斯特'对象没有属性' ref' ",似乎这个函数只能将整数转换为bitvec,有没有其他方法将Int转换为bitvec?

此外,我知道此功能现在被视为未解释,我是否需要从(bv-enable-int2bv-propagation option)重新编译本地版本?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您建议的代码首先尝试将x转换为位向量值(BitVecVal),即实际数字,但x不是值(数字)。正确的表达式可以构造如下:

x = Int('x')
raw = Z3_mk_int2bv(x.ctx_ref(), 16, x.as_ast())
reg = BitVecRef(raw, x.ctx)
print reg

在上一次Z3发布之前很久就添加了int2bv-propagation修复程序,因此如果您使用的版本不到一年左右,则不必重新编译任何内容。

相关问题