#!perl -lw $x = "\x55\xAA\x55\xAA";; substr( $x, $_, 1 ) = chr( ord( substr( $x, $_, 1 )) << 1 ) for 0 .. 3;; my $ox = $x; print unpack 'b*', $x;; print unpack 'U0b*', $x;; print unpack 'C0b*', $x;; __END__ Character in 'b' format wrapped in unpack at - line 5. Character in 'b' format wrapped in unpack at - line 5. 01010101001010100101010100101010 0100001101010101101000110010100101000011010101011010001100101001 Character in 'b' format wrapped in unpack at - line 7. Character in 'b' format wrapped in unpack at - line 7. 01010101001010100101010100101010 #### $ perl #!perl -lw $x = "\x55\xAA\x55\xAA";; substr( $x, $_, 1 ) = chr( ord( substr( $x, $_, 1 )) << 1 ) for 0 .. 3;; my $ox = $x; use bytes; print unpack 'b*', $x;; print unpack 'U0b*', $x;; print unpack 'C0b*', $x;; __END__ 0100001101010101101000110010100101000011010101011010001100101001 11000011010000010100001101010101110000111010000101000011001010011100001101000001010000110101010111000011101000010100001100101001 0100001101010101101000110010100101000011010101011010001100101001