in reply to Re: pack/unpack woes
in thread pack/unpack woes
A little explanation of the changes, with some corrections:
C4 is the same as C C C C. It extracts 4 numbers.
$ perl -e'printf "0x%X\n", $_ for unpack "C4", "\x12\x34\x56\x78"' 0x12 0x34 0x56 0x78
But that's not what you want. You want to extract a single 32-bit unsigned integer in little-endian byte order.[1] After consulting Mini-Tutorial: Formats for Packing and Unpacking Numbers, we determine that we need L< or V for that.
$ perl -e'printf "0x%X\n", $_ for unpack "L<", "\x12\x34\x56\x78"' 0x78563412
So, what you want is
unpack( 'a4 C C Q< L< L< L< C', $ogg_head )
Note that this is only 27 bytes, not 28. The number of remaining bytes is indicated by that last field (the 27th byte), and may be a number other than one.
As hinted by the parent, Q is only available on builds of Perl with 64-bit integers (i.e. where perl -V:uvsize aka perl -Mv5.10 -MConfig -e'say $Config{uvsize}' prints 8 or more).
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: pack/unpack woes
by james289o9 (Acolyte) on Jun 14, 2022 at 22:12 UTC | |
by AnomalousMonk (Archbishop) on Jun 15, 2022 at 06:12 UTC |