在Perl中将二进制数据拆分为字节数组
我基本上希望将二进制字符串转换为一个数组/字节列表(以便允许索引,并避免使用在Perl中将二进制数据拆分为字节数组,perl,split,binary-data,unpack,Perl,Split,Binary Data,Unpack,我基本上希望将二进制字符串转换为一个数组/字节列表(以便允许索引,并避免使用substr,因为它的语法使事情变得复杂),我提出了以下建议: 运行此代码会产生以下结果: $ perl test.pl Copied atmp2 contents as hex: 80, 43 Copied atmp2 as ushort (16bit) int: 17280 [17280] lastindex: 10 Argument "M-\0" isn't numeric in pack at test.pl l
substr
,因为它的语法使事情变得复杂),我提出了以下建议:
运行此代码会产生以下结果:
$ perl test.pl
Copied atmp2 contents as hex: 80, 43
Copied atmp2 as ushort (16bit) int: 17280 [17280]
lastindex: 10
Argument "M-\0" isn't numeric in pack at test.pl line 38.
Argument "C" isn't numeric in pack at test.pl line 38.
Copied btmp2 contents as hex: 00, 00
Copied btmp2 as ushort (16bit) int: 0 [0]
如何使第二部分(btmp2)的行为与第一部分(atmp2)相同?事实证明,当使用
拆分时,它确实创建了一个与原始字符串中相同字节的数组;然而,它似乎还以某种方式将结果数组标记为“文本”,因此进一步的处理失败,并出现“参数不是数字”
答案很简单,就是将拆分
行替换为使用解包
的行,而不是:
- my @btmp = split('',$indata);
+ my @btmp = unpack('C*',$indata);
。。。在那之后,所有的工作都如预期的那样(两个打印输出都是相同的)。有趣的是,在这两种情况下,“lastindex”(对于从字符串派生的数组)将显示为10(这使我认为binmode
可能有问题,这就是为什么代码中都有这些语句) 它确实帮了我的忙,谢谢!我不敢相信回答这个简单的问题有多困难,但我找不到一个Perl文档、手册页或教程可以清楚地解释这一点。。。
- my @btmp = split('',$indata);
+ my @btmp = unpack('C*',$indata);