代码之家  ›  专栏  ›  技术社区  ›  squirem

在Z3中使用位向量文字

  •  0
  • squirem  · 技术社区  · 5 年前

    我开始在C++API中使用Z3,我主要感兴趣的是使用它对位向量的支持。

    然而,我完全无法弄清楚如何将位向量文字与表达式结合使用。

    以下是我试图实现的基本目标:

    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位或更少,这不会是问题,但我需要支持更大的位向量长度。

    0 回复  |  直到 5 年前
        1
  •  1
  •   alias    5 年前

    使用 bv_val : https://z3prover.github.io/api/html/classz3_1_1context.html#a2bda3f1857cc76d49ca6f3653c02ff44

    它有6个重载,适用于你可能开始的各种事情。 int , unsigned , int64_t , uint64_t ,甚至 char const * 等。在这种情况下,你想要 char常量* 重载,将值作为十进制字符串。