在 Z3 中使用位向量文字
Using Bit-Vector Literal in Z3
我开始将 Z3 与 C++ API 结合使用,我主要对使用它对位向量的支持感兴趣。
但是,我完全无法理解如何将位向量文字与表达式一起使用。
这是我要完成的基本任务:
context z3_ctx;
solver z3_solver(z3_ctx);
optimize z3_optimizer(z3_ctx);
expr x = z3_ctx.bv_const("x", 256);
z3_solver.add(x == "#x4123"); // Need help here
没有在线示例说明我如何完成这个简单的任务。如果我的位向量仅为 64 位或更少,这不是问题,但我需要支持更大的位向量长度。
使用bv_val
:https://z3prover.github.io/api/html/classz3_1_1context.html#a2bda3f1857cc76d49ca6f3653c02ff44
它带有 6 个重载,适用于您可能开始的各种事情。 int
、unsigned
、int64_t
、uint64_t
,甚至 char const *
等。在这种情况下,您需要 char const *
重载,将值作为十进制字符串。
我开始将 Z3 与 C++ API 结合使用,我主要对使用它对位向量的支持感兴趣。
但是,我完全无法理解如何将位向量文字与表达式一起使用。
这是我要完成的基本任务:
context z3_ctx;
solver z3_solver(z3_ctx);
optimize z3_optimizer(z3_ctx);
expr x = z3_ctx.bv_const("x", 256);
z3_solver.add(x == "#x4123"); // Need help here
没有在线示例说明我如何完成这个简单的任务。如果我的位向量仅为 64 位或更少,这不是问题,但我需要支持更大的位向量长度。
使用bv_val
:https://z3prover.github.io/api/html/classz3_1_1context.html#a2bda3f1857cc76d49ca6f3653c02ff44
它带有 6 个重载,适用于您可能开始的各种事情。 int
、unsigned
、int64_t
、uint64_t
,甚至 char const *
等。在这种情况下,您需要 char const *
重载,将值作为十进制字符串。