将 int 转换为 bitvec 时出现 z3py 错误
z3py error when converting int to bitvec
从 (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)
但是我总是得到一个错误说“'Ast' object has no attribute 'ref'”,似乎这个函数只能将整数转换为 bitvec,有没有其他方法可以将 Int 转换为 bitvec ?
另外我知道这个函数目前被视为未解释,我需要从 (bv-enable-int2bv-propagation option) 重新编译我的本地版本吗?
提前致谢!
您建议的代码首先尝试将 x
转换为位向量值 (BitVecVal),即实际数字,但 x
不是值(数字)。正确的表达式可以构造如下:
x = Int('x')
raw = Z3_mk_int2bv(x.ctx_ref(), 16, x.as_ast())
reg = BitVecRef(raw, x.ctx)
print reg
int2bv-propagation
修复早在上次 Z3 发布之前就已添加,因此如果您使用的版本不到一年,则无需重新编译任何内容。
从 (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)
但是我总是得到一个错误说“'Ast' object has no attribute 'ref'”,似乎这个函数只能将整数转换为 bitvec,有没有其他方法可以将 Int 转换为 bitvec ?
另外我知道这个函数目前被视为未解释,我需要从 (bv-enable-int2bv-propagation option) 重新编译我的本地版本吗?
提前致谢!
您建议的代码首先尝试将 x
转换为位向量值 (BitVecVal),即实际数字,但 x
不是值(数字)。正确的表达式可以构造如下:
x = Int('x')
raw = Z3_mk_int2bv(x.ctx_ref(), 16, x.as_ast())
reg = BitVecRef(raw, x.ctx)
print reg
int2bv-propagation
修复早在上次 Z3 发布之前就已添加,因此如果您使用的版本不到一年,则无需重新编译任何内容。