18


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



次に、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();
4

4 に答える 4

14

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;
于 2012-06-13T20:50:41.053 に答える
1

通常、私はchr();を使用します。

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

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

于 2012-06-13T19:46:04.997 に答える
1

これは、私がこれに投稿したのと同じ回答で、同様の質問です。

配列が以前に構築された配列バイト(私の場合はモノクロビットマップピクセルなど)であり、この正確な順序でディスクに書き込むと仮定すると$binary、以下のコードは、ubuntuサーバー10.04LTSを実行しているAMD1055tで機能しました。

私はネット上で見つけたあらゆる種類の回答を繰り返し、出力をチェックして(この回答のように、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";
?>
于 2013-08-18T01:57:46.397 に答える
0

おそらくpack関数が必要です。これにより、値をどのように構造化するか、つまり、一度に16ビットまたは32ビット、リトルエンディアンとビッグエンディアンなどを適切に制御できます。

于 2012-06-13T19:54:32.603 に答える