我正在尝试解压缩包含从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 docs。
d
是“双精度浮点数”,即64位。因此,我会尝试“单精度”的f
。@dec = unpack("f*", $lp);
您的数据是否为big or little endian是一个问题。
d
和f
使用计算机的本机字节序。您可能必须使用>
和<
修饰符强制采用字节序。@dec = unpack("f*>", $lp); # big endian
@dec = unpack("f*<", $lp); # little endian
关于perl - Perl打包和解压缩功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8859178/