【问题标题】:Bit wise operations PHP位运算 PHP
【发布时间】:2017-09-15 03:17:41
【问题描述】:

我有一个 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;

我的错误在哪里?

【问题讨论】:

  • 您使用 BIT13 但没有定义它们。你有display_errors 吗?还有,有什么问题?
  • 没有错误,只是变量有空白内容,没有0或1
  • Unpack by bits in PHP的可能重复

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


【解决方案1】:

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

其次,需要将hex字符串转换为int,可以使用hexdec。请参见下面的示例。

第三,bindec 接受字符串并且您传递整数,这很好,但是我假设您希望 000000102,但它会是 8。如果你以0 开头数字文字,你告诉解析器这个数字是八进制的。所以 OCT 中的 10 是 DEC 中的 8。而bindec 得到字符串"8",它不是有效的二进制表示,所以它返回0

$ff = hexdec(substr("FFFFFDFF",0,2));
echo $ff & 1; echo "\r\n";
echo $ff & 1 << 1; echo "\r\n";
echo $ff & 1 << 2; echo "\r\n";
echo $ff & 1 << 3; echo "\r\n";
echo $ff & 1 << 4; echo "\r\n";
echo $ff & 1 << 5; echo "\r\n";
echo $ff & 1 << 6; echo "\r\n";
echo $ff & 1 << 7; echo "\r\n";
echo $ff & 1 << 8; echo "\r\n";

echo 00000010; echo " <= this is 8, not 2 \r\n";
echo bindec(00000010); echo " <= this is 0, \"8\" (not binary) => 0 \r\n";

【讨论】:

    猜你喜欢
    • 2012-11-09
    • 2011-01-09
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    相关资源
    最近更新 更多