在php中以位的形式显示二进制字符串
我有以下代码:在php中以位的形式显示二进制字符串,php,bit-manipulation,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
$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
这段代码有什么问题?有一个输入错误
$a = pack('N',0b00111010000011110101011100100010);
^
我将代码更改为此,我的问题得到了解决:
$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);
$a=pack('N',0B0011010100000110101011100100010);
$str='';
对于($j=0;$j=0;$k--){
$bit=($num>>$k)&1;
$str.=$bit;
}
}
var_dump($str);
另一种方法是移动正在读取的位,而不是数据字节,事实上也是如此。不需要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";
$a=pack('N',0B0011010100000110101011100100010);
$str='';
对于($i=0;$i 0){
$str.=($byte&$mask)?'1':'0';
}
}
回显“$str\n”;
编辑:修复了打字错误,现在运行您的代码执行时间很长。在我的浏览器中,它的时间是无限的,最终以溢出内存大小结束!!但我的解决方案的执行时间大约是1秒。哎呀,有两个bug。现在试试。不知道为什么它不会退出,但是,在我的系统上,它立即出错了。