2014-12-06 61 views
1

位的形式二進制字符串我有這樣的代碼:顯示,在PHP

$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 

什麼在這個代碼中是錯誤的?

回答

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); 
1

有一個錯字。

$a = pack('N',0b00111010000011110101011100100010); 
      ^
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"; 

編輯:固定的拼寫錯誤,現在運行

+0

代碼執行時間很長。在我的瀏覽器中,它的時間是無限的,最終完成溢出內存大小!但我的解決方案的執行時間約爲1秒。 – saeid 2014-12-06 23:30:11

+0

哎呀,在那裏有兩個錯誤。現在試試。不知道爲什麼它不會退出,但是,在我的系統上,它立即出錯。 – Andras 2014-12-07 00:30:25