2010-09-07 39 views
0

好吧,所以我有一個整數數組(從英特爾十六進制文件轉換),並需要輸出爲二進制。PHP Array到二進制數據

這裏是文件閱讀器,但我如何將數組轉換回字節流(utf-8)?

$filename = "./latest/firmware.hex"; 
$file = fopen($filename, "r"); 
$image = array(); 
$imagesize = 0; 
$count = 0; 
$address = 0; 
$type = 0; 

while(!feof($file)) 
{ 
    $line = fgets($file); 
    $count = intval(substr($line,1,2)); 
    $address = intval(substr($line,3,4)); 
    $type = intval(substr($line,7,2)); 
    if($type==0) 
    { 
     for ($i=0; $i < $count; $i++) { 
      $image[$address+1] = intval(substr($line,9+$i*2,2)); 
      if (($address + $i) > $imagesize) 
      { 
       $imagesize = $address + $i; 
      } 
     } 
    } 
    else if($type == 1) 
    { 
     break; 
    } 
} 
+0

你想打印二進制文件嗎?或者將圖像寫成二進制數據?你的問題不清楚。它看起來像後者,在這裏,但你的問題聽起來像你想要的打印二進制文件。 – sleepynate 2010-09-07 16:38:45

+0

對不起並沒有明確說明這是什麼。我正在讀取一個索引十六進制文件(已編譯的嵌入式C),該文件以1k塊傳輸到GSM設備以更新固件。產生的二進制文件被直接泵入設備的閃存中,並在完成後重新啓動。 – 2010-09-08 05:15:16

+0

發現了這個問題,它認爲...我很笨。使用intval()來轉換十六進制值而不是hexdec()。應該現在工作。 – 2010-09-08 06:04:03

回答

2
  • 步驟1:使用chr()擺脫ASCII值字符。

  • 步驟2:使用fwrite()將二進制數據寫入文件。

您可能希望在將其寫入文件之前將其收集到緩衝區。 PHP字符串可以安全地包含零。

+0

另外:簡單的'echo()'可以將零字節寫入標準輸出。但是如果你使用UTF-8作爲內部和/或輸出編碼,它可能會有超過128的問題。 – Notinlist 2010-09-07 16:39:41

+0

我起初有點擔心這不是UTF-8解決方案,但是由於chr()和fwrite()都將字節視爲字節,所以您基本上忽略了編碼,這意味着您應該以正確的文件結束。 – 2010-09-07 17:02:13