Z3排序转换:(一个字符)String到(长度8)bitvector
Z3 sort conversion: (one character) String to (length 8) bitvector
参考之前关于 的 SO 问题,我知道 可以将 BitVec8 转换为单字符串 。例如,运行 这个查询:
(declare-const s String)
(declare-const someBV8 (_ BitVec 8))
(assert (= (str.len s) 6))
(assert (= someBV8 #x62))
(assert (= (seq.unit someBV8) (str.at s 2)))
(assert (= (seq.unit someBV8) (str.at s 3)))
(assert (= (seq.unit someBV8) (str.at s 4)))
(check-sat)
(get-value (s))
给出以下输出:
sat
((s "\x00\x00bbb\x00"))
我想知道是否也存在相反的转换? 是否可以将单字符串转换为 BitVec8? 类似于 str2bv:
(declare-const s String)
(declare-const someBV8 (_ BitVec 8))
(assert (= (str.len s) 6))
(assert (= someBV8 #x62))
(assert (= someBV8 (str2bv (str.at s 2))))
(assert (= someBV8 (str2bv (str.at s 3))))
(assert (= someBV8 (str2bv (str.at s 4))))
(check-sat)
(get-value (s))
简短的回答是肯定的,但这既不容易也不是很有效。请参阅此处的讨论:https://github.com/Z3Prover/z3/issues/1302
如果这对您来说是一个阻碍,我建议您重新打开该工单并提供一些反馈。这样 z3 人员可能会直接向 z3 添加所需的功能。
参考之前关于
(declare-const s String)
(declare-const someBV8 (_ BitVec 8))
(assert (= (str.len s) 6))
(assert (= someBV8 #x62))
(assert (= (seq.unit someBV8) (str.at s 2)))
(assert (= (seq.unit someBV8) (str.at s 3)))
(assert (= (seq.unit someBV8) (str.at s 4)))
(check-sat)
(get-value (s))
给出以下输出:
sat
((s "\x00\x00bbb\x00"))
我想知道是否也存在相反的转换? 是否可以将单字符串转换为 BitVec8? 类似于 str2bv:
(declare-const s String)
(declare-const someBV8 (_ BitVec 8))
(assert (= (str.len s) 6))
(assert (= someBV8 #x62))
(assert (= someBV8 (str2bv (str.at s 2))))
(assert (= someBV8 (str2bv (str.at s 3))))
(assert (= someBV8 (str2bv (str.at s 4))))
(check-sat)
(get-value (s))
简短的回答是肯定的,但这既不容易也不是很有效。请参阅此处的讨论:https://github.com/Z3Prover/z3/issues/1302
如果这对您来说是一个阻碍,我建议您重新打开该工单并提供一些反馈。这样 z3 人员可能会直接向 z3 添加所需的功能。