解析具有混合结构的二进制文件

时间:2019-05-24 19:45:28

标签: php binary

我需要在PHP中解析二进制ABIF文件。结构如下:https://projects.nfstc.org/workshops/resources/articles/ABIF_File_Format.pdf

文件包含三个逻辑部分。标头固定在前128个字节,其他两个部分可以在任何地方,这意味着即使在某些文本或XML数据之间。如何解析这两个部分?有什么想法吗?

我找到了许多解决方案,可以解析其他语言上的ABIF:Python,C,C ++,VB,Perl,JavaScript,但是与PHP无关。 JS中有一个示例:https://github.com/eamitchell/ab1ToJSON

有一个文件示例:https://sourceforge.net/p/seqmanager/code-0/1/tree//cgi-bin/ABIveiw/test.ab1

$filename = 'files/2p_Pro_1.ab1';
$handle = fopen($filename, 'rb');
$size = filesize ($filename);
$data = fread($handle, 6);
$data = unpack('a4header/nver', $data);
$result['head'] = $data;

$data = fread($handle, 28);
$data = unpack('a4name/Nnumber/nelementtype/nelementsize/Nnumelements/Ndatasize/Ndataoffset/Ndatahandle', $data);
$result['dir'] = $data;

var_dump($result);

它返回:

Array ( 
    [head] => Array ( 
        [header] => ABIF 
        [ver] => 101 
    ) 
    [dir] => Array ( 
        [name] => tdir 
        [number] => 1
        [elementtype] => 1023 
        [elementsize] => 28 
        [numelements] => 165 
        [datasize] => 4928 
        [dataoffset] => 245963
        [datahandle] => 0
    )
)

1 个答案:

答案 0 :(得分:0)

dataoffset告诉目录从哪里开始。每个目录条目都有另一个dataoffset字段,用于指示其数据从何处开始。