How about unpacking in chunks of 3 byte resulting in 4 6-bit numbers.

Then create a few tables beforehand to remove the bit shift operations. For example the second 6-bit number would consist of the last two bit of the first byte and the first 4 bit of the second byte. So:

my @table2, @table3; foreach my $i (0..256) { $table2[$i]= $i >> 6; $table3[$i]= $i << 2 & 63; } ... my $number[0]= $byte[0] & 63; my $number[1]= $table2[$byte[0]] + $table3[$byte[1]]; ...

UDPATE: Naturally it should be profiled whether the table lookup operation is really faster than a bit shift plus bit and


In reply to Re: unpacking 6-bit values by jethro
in thread unpacking 6-bit values by BrowserUk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.