从(Z3: Is it possible to sum up a BitVec and a Real?),我尝试使用
将int转换为bitvecx = Int('x')
reg = BitVecRef(Z3_mk_int2bv(BitVecVal(x.ctx_ref(), 16, x)), x.ctx)
但我总是收到一个错误说" '阿斯特'对象没有属性' ref' ",似乎这个函数只能将整数转换为bitvec,有没有其他方法将Int转换为bitvec?
此外,我知道此功能现在被视为未解释,我是否需要从(bv-enable-int2bv-propagation option)重新编译本地版本?
提前致谢!
答案 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
修复程序,因此如果您使用的版本不到一年左右,则不必重新编译任何内容。