perl – 逐位读取二进制文件

前端之家收集整理的这篇文章主要介绍了perl – 逐位读取二进制文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法可以一点一点地读取二进制文件,而不将其保存为数组?

我有一个非常大的二进制文件,我需要一点一点地阅读它.将它保存为数组会花费很多时间,所以我想阻止它.我不在乎文件内容发生了什么.

$size = stat($args{file});
my $vector;
open BIN,"<$args{file}";
read(BIN,$vector,$size->[7],0);
close BIN;

# The code below is the part that takes a lot of time.
my @unpacked = split //,(unpack "B*",$vector);
return @unpacked;

解决方法

使用特殊的$/变量一次读入1个字节的文件,然后使用按位运算符检查字节中的每个位.最终应该是以下内容

$/ = \1; # read 1 byte at a time
while(<>) {
    my $ord = ord($_);

    # for each bit in the byte
    for(1 .. 8) {
        if($ord & 1) {
            # do 1 stuff
        }
        else {
            # do 0 stuff
        }

        # move onto the next bit
        $ord >>= 1;
    }
}

猜你在找的Perl相关文章