in reply to Re^6: Efficient 7bit compression
in thread Efficient 7bit compression
Here's a version with pre-sized return strings, using vec (but there's no need for substr). No packing, so no reversed-bits madness to deal with.
sub shrink { my $shrunk = "\0" x (length($_[0]) * 7/8); my $bit = 0; for my $orig_bit (0..(8*length($_[0])-1)) { next if $orig_bit % 8 == 7; vec($shrunk, $bit++, 1) = vec($_[0], $orig_bit, 1); } $shrunk; } sub grow { my $grown = "\0" x (length($_[0]) * 8/7); my $orig_bit = 0; for my $bit (0..(8*length($_[0])-1)) { vec($grown, $orig_bit++, 1) = vec($_[0], $bit, 1); vec($grown, $orig_bit++, 1) = 0 if $orig_bit % 8 == 7; } $grown; }
|
|---|