在PHP中以位的形式显示二进制字符串

时间:2014-12-06 21:15:35

标签: php bit-manipulation

我有这段代码:

$a = pack('N',0b00111010000011110101011100100010);

$start = strlen($a)*8 -1;
$str = '';
for($k = $start; $k>=0; $k--) {
    $bit = ($a >> $k) & 1;
    $str .= $bit;
}

var_dump($str);

输出必须是:

00111010000011110101011100100010

但请告诉我这个输出:

00000000000000000000000000000000

这段代码有什么问题?

3 个答案:

答案 0 :(得分:1)

有一个错字。

$a = pack('N',0b00111010000011110101011100100010);
               ^

答案 1 :(得分:0)

我将代码更改为此,我的问题解决了:

$a = pack('N',0b00111010000011110101011100100010);

$str = '';
for($j=0;$j<strlen($a); $j++) {
    $byte = substr($a, $j, 1);
    $num = ord($byte);
    for($k=7; $k>=0; $k--) {
        $bit = ($num >> $k) & 1;
        $str .= $bit;

    }

}
var_dump($str);

答案 2 :(得分:0)

另一种方法是移动你正在读取的位而不是数据字节,真的是同样的事情。不需要substr()单个字节,数组下标符号工作

$a = pack('N',0b00111010000011110101011100100010);
$str = '';
for ($i=0; $i<strlen($a); $i++) {
    $byte = ord($a[$i]);
    $mask = 0x80;
    while ($mask > 0) {
        $str .= ($byte & $mask) ? '1' : '0';
    }
}

echo "$str\n";

修改:修正拼写错误,现在运行