2010-09-07 2 views
0

Итак, у меня есть массив с целыми числами (преобразованный из файла Hex Hex) и вам нужно вывести его как двоичный.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

+0

Извините, не выяснил, для чего это. Я читаю индексный HEX-файл (скомпилированный встроенный C), который передается в 1k-блоках на устройство GSM для обновления прошивки. Получаемый двоичный файл накачивается непосредственно на флешку на устройстве и перезагружается после завершения. –

+0

нашел проблему, она думает ... я был глупым. используется intval() для преобразования шестнадцатеричных значений вместо hexdec(). должен работать сейчас. –

ответ

2
  • Шаг 1: Используйте chr(), чтобы получить символ из значения ASCII.

  • Шаг 2: Используйте fwrite() для записи двоичных данных в файл.

Возможно, вы захотите собрать его в буфер, прежде чем записывать его в файл. Строки PHP могут содержать нули безопасно.

+0

Дополнительно: простой 'echo()' может записывать нулевые байты в стандартный вывод. Но у него могут быть проблемы более 128, если вы используете UTF-8 как внутреннюю и/или выходную кодировку. – Notinlist

+0

Сначала я был немного обеспокоен тем, что это не было решением UTF-8, но поскольку chr() и fwrite() обрабатывают его байтом для байта, вы в основном игнорируете кодировку, а это значит, что у вас должен быть правильный файл. –

Смежные вопросы