PHP中的按位比较

时间:2013-02-21 15:25:05

标签: php math bit-manipulation linden-scripting-language

我承认我真的不知道自己在做什么!我从SecondLife中提取一些数据并在PHP中解析它。数据是llGetRegionFlags的整数,在我的情况下,返回1048592

现在我需要在PHP中进行逐位比较,以确定哪些标志为true / false。例如,0x00000040用于“块terraform”标志。

每个标志的符号都是十六进制的,我有一个要测试的整数,PHP manual表示整数,并以二进制显示示例。

所以我的问题是,给定一个整数和一些十六进制标志,我如何在PHP中进行按位比较? Brainfried!提前致谢

4 个答案:

答案 0 :(得分:1)

要确定特定位是否已打开,请使用& (AND)运营商:

if ($data & 0x00000040) {
    // block terraform flag is true
}

如果该位打开,AND运算符将返回正数。如果关闭,则AND运算符将导致零。

答案 1 :(得分:0)

使用单个AND & / OR |

if ($value1 & $value2) { }

PHP手册解释了更多:http://php.net/manual/en/language.operators.bitwise.php

答案 2 :(得分:0)

您可以定义所需的位,并检查它们以使其看起来干净。即

define('BLOCK_TERAFORM', 0x00000040);

....

if($data & BLOCK_TERAFORM) {
  ... do something ...
}

答案 3 :(得分:0)

通常使用如下代码检查位标志:

$blockTerraformFlag = 0x00000040;
$isBlockTerraform = (($RegionFlags & $blockTerraformFlag) == $blockTerraformFlag);