2012-06-13 13 views
15

を書き込む応答ストリームにバイナリデータを書き込む方法があり、
(C#のASP)の等価等
PHPはPHPでバイナリ応答

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



Iは次のように、次に希望AC#アプリケーションで応答を読むことができるように

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

答えて

11

PHPでは、文字列とバイト配列は同じものです。 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; 
+0

+1は私を助けました。私は別の答えとして私のために働いたものを加えています。 –

0

おそらくpack機能をしたい - それはあなたが自分の価値観が同様に構造化する方法を制御のまともな量を与え、一度すなわち、16ビットまたは32ビット、少し-endianとビッグエンディアンなど

1

これは私がthis, similar, questionに投稿したのと同じ回答です。

配列$binaryが、この正確な順序でディスクに書きたい先に構築された配列バイト(私の場合はモノクロビットマップピクセルのようなもの)であると仮定すると、以下のコードはAMDの1055tでubuntu server 10.04 LTS 。

結果を確認するために、私がネット上で見つけたあらゆる種類の回答を繰り返し、出力(私は倉庫またはvi, like in this answerを使用していました)を確認しました。

<?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"; 
?>