首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Perl修改Bitstream

使用Perl修改Bitstream
EN

Stack Overflow用户
提问于 2012-06-23 01:54:17
回答 1查看 312关注 0票数 2

在Perl中修改比特后,我如何将它们重新打包到比特流中呢?

我目前正在使用以下方法来解压缩:

代码语言:javascript
复制
my $bits = 5;
my $code = '';

foreach my $i (reverse 0..$bits-1) {
    $code <<= 1;
    $code  |= vec($data,$i,1);
}

例如,输出可能是16。

编辑:

这个问题与GIF图像的数据块有关。

我想要做的是填充LZW代码,以匹配PDF的LZWDecode方法所需的长度。

LZWDecode需要8位图像,其中<Clear>代码为256,<End>代码为257 (PDF参考,第44页)。

对于5位图像,编码0-31映射到图像全局颜色表中的颜色,<Clear>为32,<End>为33。

因此,我需要重新打包比特流,以便代码0-31保持不变,但是32+被256-32抵消。

我使用的是ActiveState Perl for Windows。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-26 18:00:25

代码语言:javascript
复制
# Unpack from 8 bit fields.
my @vals = unpack('C*', $bytes);

... transform @vals into 5 bit values here ...

# Pack to 5 bit fields.
my $bits = join '', map substr(pack('B*', $val), -5), @vals;
$bits .= '0' x (-length($bits) % 8);  # Pad with zeros to byte boundary
$bytes = pack('B*', $bits);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11166171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档