2012-01-15 75 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);