解压缩包含可变长度字段的二进制字符串时遇到问题。
该字符串包含多个值,每个变量值开头的第一个字节描述了值的长度。基本上,我知道每个字段的数据类型,但不知道它的长度。
举个例子我有:
$binary = "7Stefano5Italy38";
必须用以下方法解码:
$value = unpack("A7NAME/A5NATION/sAGE", $binary);
产生
$value = array(
'NAME' => 'Stefano',
'NATION' => 'Italy',
'AGE' => 38
);
有没有办法使用变量解包语法解压缩?
$value = unpack("A*NAME/A*NATION/sAGE", $binary);
...强制解释器理解记录的第一个字节是记录长度,还是必须用以下命令解压缩它?
为了向您展示一个真实的例子,这是我必须解压缩的典型记录结构:
NTEST/CHEAD/CSITE/CFLAG/CPARM/fRESULT/CnTEXT/CnALARM/COPT
字段TEXT和ALARM的长度可变。
要解压缩的二进制字符串不包含NULL终止符(\ x0),然后无法像Perl那样进行解析。