将字符串转换为按位比较

时间:2012-11-02 04:41:02

标签: php bit-manipulation

是否可以轻松转换字符串

"4 | 2"

进入标准的按位比较,因此返回6.

这样我就可以完成这样的事情

$var1 = "4 | 2";
if(evalAsBitwise($var1) & 2) {
    return true;
} else {
    return false;
} 

2 个答案:

答案 0 :(得分:1)

如果将带有空格的字符串拆分为分隔符,则会得到三个部分:第一个数字,运算符和第二个数字。在您的函数中,您可以使用switch来确定要使用的运算符。

这样的东西
function evalAsBitwise($input) {      

   $parms = explode(" ", $input);       
   $next;
   $op;

   $total = array_shift($parms);

   while (!empty($parms)) {
     $next = array_shift($parms);
     if(is_numeric($next)) {
        switch($op) {
          case "|": $total = $total | intval($next); break;
          case "&": ...
        }
     }
     else {
       $op = $next;
     } 
   }// End while
   return $total;
}

您还需要测试〜。但是如果你需要做更复杂的表达式(如a& b ^(c ^ d)),它会变得更加复杂。

答案 1 :(得分:0)

试试这个。它仅适用于按位OR。

function evalAsBitwise($var) {
    $values = explode($var);
    $result = 0;
    foreach ($$values as &$value) {
        $value = trim($value);
        $result = intVal($value) | intVal($result);
    }
    return $result;
}

我的PHP技能有点生疏,请检查语法错误。