2012-01-15 82 views
1

我必須從二進制文件中提取一些數據。數據以十六進制標記開始。 我先找到這個標記,然後提取x個字節。用php從二進制文件中提取數據

PHP適用於文本文件操作。

有人有一個好主意,用二進制數據做到這一點?

謝謝!

+0

嘗試[unpack()](http://sk.php.net/manual/en/function.unpack.php) – Vyktor 2012-01-15 19:26:11

回答

3

你不需要任何特殊功能,如包或解壓縮等。 ..雖然包裝可能會用於指定要搜索的針。 php不對字符串應用任何字符編碼,它將它們保留原樣,所以默認情況下它是二進制友好的。

$hexMarker = 0x70000000;// or whatever 
$binaryData = file_get_contents($filename); 
$x = 5; 
$pos = strpos($binaryData, $hexMarker); 
if ($pos !== false) { 
    $start = $pos + strlen($hexMarker); 
    echo substr($binaryData, $start, $x); 
} 

你可以考慮以迭代方式使用fopenfread如果文件的大小很龐大,file_get_contents會消耗大量的內存在這種情況下。但無論如何,這是一個單獨的問題。

3

您應該看看unpack()pack()函數。

下面是一個樣本,讀取整個文件到緩衝區中,並使用unpack()拿到兩個第一字符的值:

$fp = fopen("binary.txt", "r"); 
fseek($fp, 0, SEEK_END); 
$fs = ftell($fp); 
fseek($fp, 0, SEEK_SET); 
$binary = fread($fp, $fs); 
fclose($fp); 
$unpacked = unpack("c2", $binary);