我必须从二进制文件中提取一些数据。数据以十六进制标记开头。 我首先找到这个标记,然后在之后提取x个字节。
PHP适用于文本文件操作。
有人有个好主意用二进制数据吗?
谢谢!
答案 0 :(得分:3)
以下示例将整个文件读入缓冲区并使用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);
}
如果文件的大小很大,您可以考虑以迭代的方式使用fopen和fread,因为file_get_contents在这种情况下会占用大量内存。但无论如何,这是一个单独的问题。