My $0.02. I've used the bit-ordering implied in the 'irrelevant' OP.
>perl -wMstrict -le "my $bits = unpack 'b*', pack 'N*', 0x01020304, 0x11121314; print qq{'$bits'}; ;; $bits =~ s{ ((.) \2*) } { ($2 eq '1' ? '-' : '') . length($1) . ',' }xmsge; print qq{'$bits'}; ;; my @n = map 0+$_, split /,/, $bits; print qq{@n}; " '1000000001000000110000000010000010001000010010001100100000101000' '-1,8,-1,6,-2,8,-1,5,-1,3,-1,4,-1,2,-1,3,-2,2,-1,5,-1,1,-1,3,' -1 8 -1 6 -2 8 -1 5 -1 3 -1 4 -1 2 -1 3 -2 2 -1 5 -1 1 -1 3
Update: Maybe better:
>perl -wMstrict -le "my $bits = unpack 'b*', pack 'N*', 0x01020304, 0x11121314; print qq{'$bits'}; ;; my @n = map { my $l = length; chop eq '1' ? -$l : $l; } $bits =~ m{ 0+ | 1+ }xmsg ; print qq{@n}; " '1000000001000000110000000010000010001000010010001100100000101000' -1 8 -1 6 -2 8 -1 5 -1 3 -1 4 -1 2 -1 3 -2 2 -1 5 -1 1 -1 3
In reply to Re: Run length encode a bit vector
by AnomalousMonk
in thread Run length encode a bit vector
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |