1

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

现在我需要在 PHP 中进行按位比较,以确定哪些标志是真/假。例如 0x00000040 用于“block terraform”标志。

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

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

4

4 回答 4

1

要确定某个特定位是否打开,请使用 & (AND) 运算符:

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

如果该位打开,AND 运算符将返回一个正数。如果它被关闭,那么 AND 运算符将产生一个零。

于 2013-02-21T15:28:50.410 回答
0

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

define('BLOCK_TERAFORM', 0x00000040);

....

if($data & BLOCK_TERAFORM) {
  ... do something ...
}
于 2013-02-21T15:30:11.233 回答
0

使用单个 AND &/ OR|

if ($value1 & $value2) { }

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

于 2013-02-21T15:28:18.090 回答
0

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

$blockTerraformFlag = 0x00000040;
$isBlockTerraform = (($RegionFlags & $blockTerraformFlag) == $blockTerraformFlag);
于 2013-02-21T15:35:15.050 回答