用 Perl 解压不均匀数量的字节
Posted
技术标签:
【中文标题】用 Perl 解压不均匀数量的字节【英文标题】:Unpack uneven amount of bytes with Perl 【发布时间】:2018-04-04 06:23:48 【问题描述】:有没有办法强制解包将单个字节视为“空填充”短字节,同时解包字节数不均匀的标量?
示例代码:
my $input = 'abcde';
foreach (unpack 'S*', $input)
print "$_ ";
# Result:
# 25185 25699
# Expected result:
# 25185 25699 101
我知道可以检查标量的长度并附加它以防它不均匀,如下所示,但是有没有一种更简洁的方法可以让 unpack 在需要时自动处理它?
# What I'm trying to avoid before running unpack:
if (length($input) % 2))
$input .= "\0";
【问题讨论】:
【参考方案1】:可以每次添加空字节,当字节数为偶数时会被忽略。
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 2;
sub Unpack
my $input = shift;
[ unpack 'S*', "$input\0" ]
is_deeply Unpack("abcde\0"), [25185, 25699, 101];
is_deeply Unpack("abcde"), [25185, 25699, 101];
【讨论】:
以上是关于用 Perl 解压不均匀数量的字节的主要内容,如果未能解决你的问题,请参考以下文章
如何解压字符串 - 使用 sprintf 创建 - 在 Perl 中具有固定宽度