比特操作PHP

时间:2017-04-19 04:36:56

标签: php binary hex bit-manipulation bitwise-operators

我有ASCII字符串"FFFFDFFF",表示十六进制值。我希望将该值放入二进制变量中,每个位都为10。下面是我的第一次尝试,仅使用一个等于FF的字节作为示例。

$bit1 = bindec(00000001);
const BIT2 = bindec(00000010);
$bit3= bindec(00000100);
const BIT4 = 0b00001000;
const BIT5 = 0b00010000;
const BIT6 = 0b00100000;
const BIT7 = 0b01000000;
const BIT8 = 0b10000000;

    $byte4=substr($data[12],0,2);
    $bit4_1= $byte1 & BIT1;
    $bit4_2= $byte1 & BIT2;
    $bit4_3= $byte1 & BIT3;
    $bit4_4= $byte1 & BIT4;
    $bit4_5= $byte1 & BIT5;
    $bit4_6= $byte1 & BIT6;
    $bit4_7= $byte1 & BIT7;
    $bit4_8= $byte1 & BIT8;

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

首先,您要在计算中使用$byte4变量,您使用的是$byte1,该变量未初始化,因此被强制为integer,并以0初始化。这就是为什么您看不到$bit..变量中有任何设置的原因。

第二,您需要将十六进制字符串转换为int,可以使用hexdec。参见下面的示例。

第三,bindec接受字符串,并且您要传递整数,这很好,但是我假设您期望000000102,但它将为{{1} }。如果您以8开头数字文字,则是告诉解析器该数字是八进制的。因此,OCT中的0在DEC中是10。并且8获取字符串bindec,它不是有效的二进制表示形式,因此它返回"8"

0