用 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 中具有固定宽度

python 结构解压

序列解压

压缩文件密码忘了怎么解除

C++程序编写压缩器/解压器(长度-游程编码的压缩/解压+霍夫曼编码压缩/解压 (霍夫曼树))

压缩包解压后可以删除吗