PHP написать бинарный ответ

В php есть способ записи двоичных данных в поток ответов,
как эквивалент (c # asp)

System.IO.BinaryWriter Binary = new System.IO.BinaryWriter(Response.OutputStream);
Binary.Write((System.Int32)1);//01000000
Binary.Write((System.Int32)1020);//FC030000
Binary.Close();



Затем я хотел бы иметь возможность прочитать ответ в приложении C #, как

System.Net.HttpWebRequest Request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("URI");
System.IO.BinaryReader Binary = new System.IO.BinaryReader(Request.GetResponse().GetResponseStream());
System.Int32 i = Binary.ReadInt32();//1
i = Binary.ReadInt32();//1020
Binary.Close();

Ответы на вопрос(4)

это, похоже, вопрос.

Предполагая, что массив$binary это предварительно сконструированные байты массива (например, монохромные пиксели растрового изображения в моем случае), которые вы хотите записать на диск в этом точном порядке, приведенный ниже код работал для меня на AMD 1055t, работающем на сервере Ubuntu 10.04 LTS.

Я перебирал все ответы, которые мог найти в Сети, проверяя вывод (я использовал либо shed, либоVI, как в этом ответе) подтвердить результаты.

<?php
$fp = fopen($base.".bin", "w");
$binout=Array();
for($idx=0; $idx < $stop; $idx=$idx+2 ){
    if( array_key_exists($idx,$binary) )
        fwrite($fp,pack( "n", $binary[$idx]<<8 | $binary[$idx+1]));
    else {
        echo "index $idx not found in array \$binary[], wtf?\n";
    }
}
fclose($fp);
echo "Filename $base.bin had ".filesize($base.".bin")." bytes written\n";
?>

Обычно я используюchr();

echo chr(255); // Returns one byte, value 0xFF

http://php.net/manual/en/function.chr.php

Вы, вероятно, хотитепак функция - она дает вам приличный контроль над тем, как вы хотите, чтобы ваши значения также структурировались, то есть 16 бит или 32 бита за раз, от младшего к старшему до старшего и т.д.

Решение Вопроса

pack создать байтовый массив (строку), который вы можете записать. Когда я это понял, жизнь стала легче.

$my_byte_array = pack("LL", 0x01000000, 0xFC030000);
$fp = fopen("somefile.txt", "w");
fwrite($fp, $my_byte_array);

// or just echo to stdout
echo $my_byte_array;
 18 авг. 2013 г., 03:56
+1 за ответ, который мне помог. Я добавляю то, что сработало для меня ниже, в качестве другого ответа.

Ваш ответ на вопрос