使用 Perl 解压不均匀数量的字节
Unpack uneven amount of bytes with Perl
有没有办法强制解包将单个字节视为“空填充”短,同时解包字节数不均匀的标量?
示例代码:
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 .= "[=11=]";
}
每次都可以加上空字节,当字节数为偶数时会忽略
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 2;
sub Unpack {
my $input = shift;
[ unpack 'S*', "$input[=10=]" ]
}
is_deeply Unpack("abcde[=10=]"), [25185, 25699, 101];
is_deeply Unpack("abcde"), [25185, 25699, 101];
有没有办法强制解包将单个字节视为“空填充”短,同时解包字节数不均匀的标量?
示例代码:
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 .= "[=11=]";
}
每次都可以加上空字节,当字节数为偶数时会忽略
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 2;
sub Unpack {
my $input = shift;
[ unpack 'S*', "$input[=10=]" ]
}
is_deeply Unpack("abcde[=10=]"), [25185, 25699, 101];
is_deeply Unpack("abcde"), [25185, 25699, 101];