在PHP中解压缩可变长度的二进制文件

时间:2015-07-15 12:39:56

标签: php binary unpack

解压缩包含可变长度字段的二进制字符串时遇到问题。

该字符串包含多个值,每个变量值开头的第一个字节描述了值的长度。基本上,我知道每个字段的数据类型,但不知道它的长度。

举个例子我有:

$binary = "7Stefano5Italy38";

必须用以下方法解码:

$value = unpack("A7NAME/A5NATION/sAGE", $binary);

产生

$value = array(
    'NAME'   => 'Stefano',
    'NATION' => 'Italy',
    'AGE'    => 38
);

有没有办法使用变量解包语法解压缩?

$value = unpack("A*NAME/A*NATION/sAGE", $binary);

...强制解释器理解记录的第一个字节是记录长度,还是必须用以下命令解压缩它?

  1. 从字节0开始获取第一个字段长度
  2. 获取第一个字段值
  3. 从字节0 +第1个字段长度
  4. 开始获取第2个字段长度
  5. 获取第二个字段值
  6. (...)
  7. 为了向您展示一个真实的例子,这是我必须解压缩的典型记录结构:

    NTEST/CHEAD/CSITE/CFLAG/CPARM/fRESULT/CnTEXT/CnALARM/COPT
    

    字段TEXT和ALARM的长度可变。

    要解压缩的二进制字符串不包含NULL终止符(\ x0),然后无法像Perl那样进行解析。

0 个答案:

没有答案