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

这是我在这个类似的问题上发布的相同答案。

假设该数组$binary是您希望按此确切顺序写入磁盘的先前构造的数组字节(如我的情况下的单色位图像素),则以下代码在运行 ubuntu 服务器 10.04 LTS 的 AMD 1055t 上为我工作。

我遍历了我可以在网上找到的每一种答案,检查输出(我使用了 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 回答
1

通常,我使用chr();

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

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

于 2012-06-13T19:46:04.997 回答
0

您可能需要pack函数——它可以让您对值的结构方式进行相当多的控制,即一次 16 位或 32 位、小端与大端等。

于 2012-06-13T19:54:32.603 回答