2012-06-13 8 views
15

Trong php là có một cách để ghi dữ liệu nhị phân vào dòng phản ứng,
như tương đương với (C# asp)
PHP viết phản ứng nhị phân

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



tôi sẽ sau đó như để có thể đọc phản hồi trong ứng dụng aC#, như

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

Trả lời

11

Trong PHP, chuỗi và mảng byte là một và giống nhau. Sử dụng pack để tạo một mảng byte (chuỗi) mà bạn có thể viết. Một khi tôi nhận ra điều đó, cuộc sống trở nên dễ dàng hơn.

$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 cho câu trả lời đã giúp tôi. Tôi đang thêm những gì làm việc cho tôi dưới đây như một câu trả lời khác. –

0

Có thể bạn muốn pack chức năng - nó mang lại cho bạn một số tiền khá kiểm soát cách bạn muốn giá trị của bạn có cấu trúc là tốt, ví dụ, 16 bit hoặc 32 bit tại một thời điểm, chút -endian so với big-endian, v.v.

1

Đây là câu trả lời tương tự tôi đã đăng lên this, similar, question. Giả sử mảng $binary là một mảng byte đã được tạo trước đó (như bitmap đơn sắc trong trường hợp của tôi) mà bạn muốn ghi vào đĩa theo thứ tự chính xác này, mã bên dưới đã làm việc cho tôi trên máy chủ AMD 1055t chạy ubuntu 10.04 LTS .

Tôi lặp qua tất cả các loại câu trả lời tôi có thể tìm thấy trên mạng, kiểm tra đầu ra (Tôi đã sử dụng hoặc đổ hoặc vi, like in this answer) để xác nhận kết quả.

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