2012-06-13 22 views
15

En PHP es que hay una manera de escribir los datos binarios a la secuencia de respuesta,
como el equivalente de (C# ASP)
PHP escribir respuesta binaria

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



Después me gustaría para poder leer la respuesta en la aplicación de CA #, como

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

Respuesta

11

En PHP, las cadenas y las matrices de bytes son una misma cosa. Use pack para crear una matriz de bytes (cadena) que luego puede escribir. Una vez que me di cuenta de eso, la vida se hizo más fácil.

$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 por respuesta que me sirvió. Estoy agregando lo que funcionó para mí a continuación como otra respuesta. –

0

Es probable que la función pack - le da una buena cantidad de control sobre cómo desea que sus valores estructurados, así, es decir, 16 bits o 32 bits a la vez, poco -endian versus big-endian, etc.

1

Esta es la misma respuesta que he publicado en this, similar, question. $binary suponiendo que una serie de bytes construidos previamente (como píxeles de mapa de bits monocromos en mi caso .

Repetí todos los tipos de respuestas que pude encontrar en la red, comprobando la salida (utilicé shed o vi, like in this answer) para confirmar los resultados.

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