themainframe/php-binary

一个用于解析结构化二进制流的PHP库。

v0.2.0 2016-05-18 21:02 UTC

README

一个用于解析结构化二进制流的PHP库。

文档

文档可以在 文档 目录中找到,也可以在php-binary.damow.net 上找到。

用法

以下是一个示例二进制格式

  1. 4个字节 的文本。
  2. 1个字节 无符号整数。
  3. 一个包含 2个字节 文本的字段,后面跟着一个 1个字节 无符号整数;重复 n 次,其中 n 是对第 2 点中描述的字节的回参考。

编写解析器模式

此格式可以按以下方式解析。在此示例中,模式使用JSON进行描述,以便于理解,但在实践中可以使用任何数组。

$builder = new Binary\SchemaBuilder;
$schema = $builder->createFromArray(json_decode('

    {
       "sometext": {
           "_type": "Text",
           "size": 4
       },
       "somebyte": {
           "_type": "UnsignedInteger",
           "size": 1
       },
       "somefields": {
           "_type": "Compound",
           "count": "@somebyte",
           "_fields": {
               "footext": {
                   "_type": "Text",
                   "size": 2
               },
               "foobyte": {
                   "_type": "UnsignedInteger",
                   "size": 1
               }
           }
       }
    }

', true));

解析流

您可以使用 php-binary 解析通用的字节流,并以符合您模式定义的关联数组输出字段。

$stream = new Binary\Stream\StringStream("FOOO\x03LOLLOMLON");
$result = $schema->readStream($stream);

$result 中的结果关联数组(此处以JSON格式展示以便理解)将包含

{
    "sometext": "FOOO",
    "somebyte": 3,
    "somefields": [
        {
            "footext": "LO",
            "foobyte": 76
        },
        {
            "footext": "LO",
            "foobyte": 77
        },
        {
            "footext": "LO",
            "foobyte": 78
        }
    ]
}