2012-02-29 62 views
0

我已經二進制存儲在串查看二進制值

$str = "100001111111110000101010100010000001"; 

我是從數字轉換陣列

$arrAsc = Array 
(
    [0] => 33 
    [1] => 63 
    [2] => 48 
    [3] => 42 
    [4] => 34 
    [5] => 1 
) 
$arrBinary = array_map(create_function('$a', 'return decbin($a);'), $arrAsc); 

出打破值轉換成6比特的塊後得到我有

Array 
(
    [0] => 100001 
    [1] => 111111 
    [2] => 110000 
    [3] => 101010 
    [4] => 100010 
    [5] => 1 
) 

我的問題是如何首先顯示零,即使有5,6,7 ....位塊

Array 
(
    [0] => 100001 
    [1] => 111111 
    [2] => 110000 
    [3] => 101010 
    [4] => 100010 
    [5] => 000001 
) 
+0

我只是好奇,你爲什麼要那樣做? – Shoe 2012-03-01 00:01:02

+0

@Jeff Pigarelli我準備參加php考試。嘗試構建base64_decode()以更好地理解php – qpaycm 2012-03-01 00:04:30

回答

2

您可以使用array_map()str_pad()爲每個字符串添加前導零。如果你想只有最後6位(在情況下,有可能是7或更多位),你也可能需要使用substr()

<? 
// Create our array 
$chunks = array('100001', '111111', '110000', '101010', '100010', '1'); 

// Apply an anonymous function to each chunk 
$chunks = array_map(
    function($x) { 
    // Get only 6 last bits (might not be necessary, depending on your needs) 
    $x = substr($x, -6); 
    // Add leading zeroes 
    $x = str_pad($x, 6, '0', STR_PAD_LEFT); 
    }, 
    $chunks 
); 

print_r($chunks); 
// Array 
// (
//  [0] => 100001 
//  [1] => 111111 
//  [2] => 110000 
//  [3] => 101010 
//  [4] => 100010 
//  [5] => 000001 
//) 
0

你真正要求做的是pad a string帶前導零。

使用類似:

$paddedString = str_pad($oldString, 6, '0', STR_PAD_LEFT); 

這顯然是適合用在array_map(),這你已經知道如何使用。

0

您可以用printf格式化字符串:

<?php 

$str = "1111111000011010101001000000011"; 
$words = array(); 

foreach (str_split($str, 6) as $word) { 
    $words[] = sprintf("%06s", $word); 
} 

print_r($words); 

這將輸出:

Array 
(
    [0] => 111111 
    [1] => 100001 
    [2] => 101010 
    [3] => 100100 
    [4] => 000001 
    [5] => 000001 
) 
0

這應該做的伎倆。

if (strlen($a) < 6) { 
    $i = (6-strlen($a)); 
    $add = ''; 
    for ($x = 0; $x <= $i; $i++) { 
     $add .= '0'; 
    } 
    $a = $add.$a; 
} 
1

要在Frxstrem的(第一個)答案擴大,這可以一氣呵成地完成,而無需使用array_map先轉換成數字,然後再墊他們:

$arrAsc = array(33, 63, 48, 42, 34, 1); 

$array_binary = array_map(function($dec) { 
    return str_pad(decbin($dec), 6, '0', STR_PAD_LEFT); 
}, $arrAsc); 

Array 
(
    [0] => 100001 
    [1] => 111111 
    [2] => 110000 
    [3] => 101010 
    [4] => 100010 
    [5] => 000001 
)