in reply to perl bitology - breaking into bytes
The answer you are seeking is vec.
This snippet prints a bit string (as a string rather than a number as your number could be 128-bits which would move into the realms of floating point inaccuracies), consisting of the value of the 49th through 69th bits, of the 6, 543, 210th 128-bit chunk of a 100MB string.
open F, '<', 'e:\100MB' or die $!; binmode F; { local $/ = \(100*1024*1024); $data = <F> }; sub bits_of_chunk{ my( $chunk, $start, $end ) = @_; join'', map{ vec $data, $_, 1 } ($chunk * 16 * 8 + $start) .. ($chunk * 16 * 8 +$end); }; print bits_of_chunk( 6543210, 49, 69 ); 000000000000000000000
The bits are accessed directly from the 100MB string and are return very quickly.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: perl bitology - breaking into bytes
by spurperl (Priest) on Oct 21, 2003 at 06:13 UTC |