2013-07-31 37 views
6

Tôi có một tập tin văn bản sử dụng chương trình JAVA trong đó có một mảng các số nguyên viết như nhị phân tôi đã thực hiện một vòng lặp for trong mảng này và viết nó sử dụng phương pháp nàyPHP đọc tập tin như một mảng byte

public static void writeInt(OutputStream out, int v) throws IOException { 
    out.write((v >>> 24) & 0xFF); 
    out.write((v >>> 16) & 0xFF); 
    out.write((v >>> 8) & 0xFF); 
    out.write((v >>> 0) & 0xFF); 
} 

tôi hỏi về cách đọc tệp này trong PHP.

+0

xem [unpack] (http://www.php.net/manual/en/function.unpack.php) – Orangepill

+0

@Orangepill Tôi mới sử dụng php và khó quay số bằng tay một mình bạn có thể giúp tôi không một đoạn mã giả định chúng ta bắt đầu đọc tệp với mã này '$ filename =" myFile.sav "; $ handle = fopen ($ filename, "rb"); $ contents = fread ($ handle, filesize ($ filename)); ' – BlackRoot

Trả lời

10

Tôi tin rằng mã bạn đang tìm kiếm là:

$byteArray = unpack("N*",file_get_contents($filename)); 

UPDATE: đang làm việc được cung cấp bởi OP

$filename = "myFile.sav"; 
$handle = fopen($filename, "rb"); 
$fsize = filesize($filename); 
$contents = fread($handle, $fsize); 
$byteArray = unpack("N*",$contents); 
print_r($byteArray); 
for($n = 0; $n < 16; $n++) 
{ 
    echo $byteArray [$n].'<br/>'; 
} 
+0

Cảm ơn Cảm ơn Cảm ơn Orangepill đây là những gì tôi đang tìm kiếm. mã tôi đang sử dụng: '$ filename =" myFile.sav "; $ handle = fopen ($ filename, "rb"); $ fsize = filesize ($ filename); $ contents = fread ($ handle, $ fsize); $ byteArray = giải nén ("N *", $ nội dung); print_r ($ byteArray); cho ($ n = 1; $ n <= 16; $ n ++) { \t echo $ byteArray [$ n]. '
'; } ' – BlackRoot

+0

Tôi không thể làm việc này. Mã ví dụ không thành công khi giải nén. Có thể là do tệp tôi đang cố gắng đọc? – FredFury

4

Bạn nên đọc tệp dưới dạng chuỗi và sau đó sử dụng giải nén để phân tích cú pháp. Trong trường hợp này bạn đã lưu trữ một số nguyên 32-bit để endian byte lớn, vì vậy sử dụng:

$out = unpack("N", $in); 

mã Định dạng được ghi nhận ở đây: http://www.php.net/manual/en/function.pack.php

+0

Cảm ơn Joni nhưng khi thực thi mã này tôi nhận được một mảng với một phần tử chỉ có giải pháp dưới đây từ Orangepill là tuyệt vời và có được tất cả phần tử trong tệp của tôi 'm sử dụng mã này: ' $ filename = "myFile.sav"; $ handle = fopen ($ filename, "rb"); $ fsize = filesize ($ filename); $ contents = fread ($ handle, $ fsize); $ out = giải nén ("N", $ nội dung); print_r ($ out); ' mã này trả lại một phần tử chỉ – BlackRoot

+0

Nếu tệp của bạn đã đóng gói tất cả các cách đến cuối và không chỉ một bạn có thể sử dụng mã định dạng asterix' * 'để có được tất cả. Hoặc bạn có thể thêm một số để cho biết số lượng int sẽ được đọc. Đây là tất cả tài liệu trên trang được liên kết. – Joni

+0

đó là sự thật cảm ơn Joni – BlackRoot

Các vấn đề liên quan