使用php从二进制文件中提取数据

时间:2012-01-15 19:20:30

标签: php binary

我必须从二进制文件中提取一些数据。数据以十六进制标记开头。 我首先找到这个标记,然后在之后提取x个字节。

PHP适用于文本文件操作。

有人有个好主意用二进制数据吗?

谢谢!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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在这种情况下会占用大量内存。但无论如何,这是一个单独的问题。