我有这个代码:
$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);
另一种方法是移动您正在读取的位而不是数据字节,实际上也是如此。 无需 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";
编辑:修复了拼写错误,现在运行