in reply to Unpacking byte stream long/quad little/big endian fields

#!/pro/bin/perl use 5.18.3; use warnings; use Config; use Fcntl; printf "Perl $^V %s ivsize %d byteorder %d\n", @Config{qw( archname ivsize byteorder )}; # Generate a "binary file" with a string of bytes likely to show up is +sues in # decoding my $binary = "\x91\x34\x33\x90\x81\x32\x31\x80"; for ([ "BE32" => "I>I>" ], [ "LE32" => "I<I<" ], [ "BE64" => "Q>" ], [ "LE64" => "Q<" ], ) { my ($type, $format) = @$_; my $data = pack $format => 0, 0; open my $fh, "<", \$binary; read $fh, $data, length $data; my @x = unpack $format => $data; if (@x == 2) { printf "%s\: %08x%08x\n", $type, @x; } else { printf "%s\: %016x\n", $type, @x; } }

=>

BE32: 9134339081323180 LE32: 9033349180313281 BE64: 9134339081323180 LE64: 8031328190333491

Enjoy, Have FUN! H.Merijn

Replies are listed 'Best First'.
Re^2: Unpacking byte stream long/quad little/big endian fields
by GrandFather (Saint) on Jan 22, 2021 at 08:26 UTC

    Ahh, I hadn't noticed < and > in the pack/unpack docs. It is there in my Perl 5.14 Pocket Reference, but somewhat buried over the page in the middle of a large paragraph. They seem not to be mentioned in the 5.10 version of the reference, but poking around with perldoc indicates the endien modifiers are new in 5.10. Maybe that's why I wasn't aware of them?

    Anyway, much cleaner, thank you.

    Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond