我正在尝试解压缩包含从spectrum analyzer接收到的字符串的变量:
#42404?û¢-+Ä¢-VÄ¢-oÆ¢-8æ¢-bÉ¢-ôÿ¢-+Ä¢-?Ö¢-sÉ¢-ÜÖ¢-¦ö¢-=Æ¢-8æ¢- uô¢-=Æ¢-\Å¢-uô¢-?ü¢-} ¦¢-=Æ¢-)...

格式为实数32,它使用四个字节存储每个值。数字#42404表示存在4个额外的字节,并收集了2404/4 = 601点。数据从#42404之后开始。现在,当我收到一个字符串变量时,

$lp = ibqry($ud,":TRAC:DATA? TRACE1;*WAI;");

我不确定如何将其转换为数字数组:(...我应该使用类似followin的东西吗?
@dec = unpack("d", $lp);

我知道这是行不通的,因为我没有得到正确的值,并且数据点的数量肯定不是601 ...

最佳答案

首先,您必须去除#42404并希望以下二进制数据中的任何一个都不是ASCII数字。

$lp =~ s{^#\d+}{};

我不确定“Real 32”是什么格式,但是我猜测这是32位长的单精度浮点数。看着the pack docsd是“双精度浮点数”,即64位。因此,我会尝试“单精度”的f
@dec = unpack("f*", $lp);

您的数据是否为big or little endian是一个问题。 df使用计算机的本机字节序。您可能必须使用><修饰符强制采用字节序。
@dec = unpack("f*>", $lp);  # big endian
@dec = unpack("f*<", $lp);  # little endian

关于perl - Perl打包和解压缩功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8859178/

10-12 21:57