在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();
答案 0 :(得分:12)
在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;
答案 1 :(得分:1)
通常,我使用chr()
;
echo chr(255); // Returns one byte, value 0xFF
答案 2 :(得分:1)
这与我发布到this, similar, question的答案相同。
假设数组$binary
是一个先前构造的数组字节(就像我的情况下的单色位图像素),你想要按照这个确切的顺序写入磁盘,下面的代码在运行ubuntu的AMD 1055t上适用于我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";
?>
答案 3 :(得分:0)
你可能想要pack函数 - 它可以让你对你想要的值的结构进行适当的控制,即一次16位或32位,小端与大端endian等。