In C or Perl I'd break the string into 3 byte chunk and extract the 6 bit bytes using bitmasks.
Something like this:
my $x = pack 'V', 1234567;
my $mask0to5 = 2**6 - 1;
my $mask6to11 = $mask0to5 << 6;
my $mask12to18 = $mask0to5 << 12;
my $mask18to24 = $mask0to5 << 18;
sub unpack_6bit_bytes {
my $byte_str = unpack 'V', $_[0];
my $byte_1 = $byte_str & $mask0to5;
my $byte_2 = ( $byte_str & $mask6to11 ) >> 6;
my $byte_3 = ( $byte_str & $mask12to18 ) >> 12;
my $byte_4 = ( $byte_str & $mask18to24 ) >> 18;
return ( $byte_1, $byte_2, $byte_3, $byte_4 );
}
print join ' ', unpack_6bit_bytes($x);
This is rough code to demonstrate the general method and only quickly tested.
--
John.