2012-06-13 3 views
15

후 응답 스트림 이진 데이터를 기록하는 방법, (C# 1 ASP)
PHP는 PHP

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



I가하고자하는 것과 같은
등가 이진 기록 응답 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(); 

답변

11

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; 
+0

+1 나를 도왔습니다. 나는 아래에 나를 위해 일한 것을 또 다른 대답으로 추가하고있다. –

0

당신은 아마 pack 기능을합니다 - 그것은 당신이 값뿐만 아니라 즉, 한 번에 16 비트 또는 32 비트, 약간의 구조화 방법을 제어 할 상당한 금액을 제공합니다 -endian 대 big-endian 등

1

이것은 내가 this, similar, question에 게시 한 답변과 같습니다.

배열 $binary가이 정확한 순서로 디스크에 쓰려는 이전에 구성된 배열 바이트 (필자의 경우 단색 비트 맵 픽셀과 같음)라고 가정하면 아래 코드는 우분투 서버 10.04 LTS를 실행하는 AMD 1055t에서 작동합니다 .

나는 인터넷에서 찾을 수있는 모든 종류의 답변을 반복하여 결과를 확인하기 위해 출력 (나는 창고 또는 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"; 
?>