Here's another approach, based on my guess that you're processing 'text' strings (of any length: 16 hex bytes used for example) consisting of any combination of hex digits and whitespace. (Assumes: '01' == 0b00000001 and '0304' == 0b0000001100000100 and etc.)
>perl -wMstrict -le "my $str = qq{ 01 02 03 \n 04 00 E0 0a 00 00 00 00 00 00 00 00 00 \n}; (my $bits = $str) =~ s{[^[:xdigit:]]}{}xmsg; $bits = unpack 'B*', pack 'H*', $bits; my @ones_offsets; push @ones_offsets, $-[1] while $bits =~ m{(1)}xmsg; print qq{'$str'}; print qq{'$bits'}; print qq{no one bits found} unless @ones_offsets; print qq{1 bit at offset $_} for @ones_offsets; " ' 01 02 03 04 00 E0 0a 00 00 00 00 00 00 00 00 00 ' '000000010000001000000011000001000000000011100000000010100000000000000 +00000000000000000000000000000000000000000000000000000000000' 1 bit at offset 7 1 bit at offset 14 1 bit at offset 22 1 bit at offset 23 1 bit at offset 29 1 bit at offset 40 1 bit at offset 41 1 bit at offset 42 1 bit at offset 52 1 bit at offset 54
If BrowserUk's guess is right and you already have the data as raw binary string (say, in $bits), just drop the
$bits = unpack 'B*', pack 'H*', $bits;
statement and all before it, and change that statement to
$bits = unpack 'B*', $bits;
instead (tested).
In reply to Re: Working with BIG binary fields
by AnomalousMonk
in thread Working with BIG binary fields
by juju
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |