2013-02-21 67 views
1

我承認我並不真正知道自己在做什麼!我從SecondLife獲取一些數據並用PHP解析它。數據是一個從llGetRegionFlags的整數,在我的情況下,返回1048592在PHP中按位比較

現在我需要在PHP中進行按位比較來確定哪些標記是真/假。例如0x00000040用於「塊地形」標誌。

對於每個標記,符號以十六進制表示,並且我有一個要測試的整數,而PHP manual表示整數並以二進制顯示示例。

所以我的問題確實是,給定一個整數和一些十六進制標誌,我該怎麼做在PHP中按位比較? Brainfried!在此先感謝

回答

1

要確定某個特定位的開啓,使用&(AND)運算符:

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

如果該位打開,AND運算符將返回一個positi數字。如果它被關閉,那麼AND運算符將導致一個零。

+0

啊哈謝謝你!我沒有意識到我可以比較一個整數的十六進制值,或者如何在PHP中使用十六進制符號。簡單,當你知道如何! – Tak 2013-02-21 15:32:53

0

使用一個單一的和& /或|

if ($value1 & $value2) { } 

PHP手冊中詳細解釋了:http://php.net/manual/en/language.operators.bitwise.php

+0

感謝mcryan,對不起,詹姆斯最後一刻落敗你的帖子!我沒有嘗試手冊,但沒有意識到我可以比較十六進制與整數等 – Tak 2013-02-21 15:33:51

0

您可以定義所需的位,並檢查它們以使其看起來乾淨。即

define('BLOCK_TERAFORM', 0x00000040); 

.... 

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

感謝hexblot偉大的想法,保持乾淨 – Tak 2013-02-21 15:33:11

0

通常bitflags檢查了一塊這樣的代碼:

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