Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP写二进制响应_Php_Binary_Response - Fatal编程技术网

PHP写二进制响应

PHP写二进制响应,php,binary,response,Php,Binary,Response,在php中,有没有一种方法可以将二进制数据写入响应流, 类似于(c#asp) 然后我希望能够在c应用程序中读取响应,比如 System.Net.HttpWebRequest Request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("URI"); System.IO.BinaryReader Binary = new System.IO.BinaryReader(Request.GetResponse().GetR

在php中,有没有一种方法可以将二进制数据写入响应流,
类似于(c#asp)



然后我希望能够在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();
通常,我使用
chr()


您可能需要该函数——它还可以让您对值的结构进行适当的控制,即一次16位或32位,小端和大端等。

在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;

这和我贴的答案是一样的

假设array
$binary
是一个先前构造的数组字节(就像我的例子中的单色位图像素),您希望按照这个确切的顺序写入磁盘,下面的代码在运行ubuntu server 10.04 LTS的AMD 1055t上为我工作

我反复浏览了在网上找到的每一种答案,检查输出(我使用shed或shed)以确认结果

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

+1了解帮助我的答案。我在下面添加了对我有用的内容作为另一个答案。我更喜欢使用
print()
而不是
echo
,因为它更像一个函数。不过,从技术上讲,两者都不是真正的功能。文档将它们称为“语言构造”。在技术上也可以执行
fopen(“php://output“”
如果输出需要文件描述符。有关详细信息,请参阅
$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;
<?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";
?>