#we are packing nibbles (4 bits) at a time
# H is big-endian order
# h is little-endian order (swaps adjacent nibbles)
my $raw = pack 'H*', '8447000c0000110a0350';
#decode back to input string...
print unpack ('H*', $raw), "\n"; # prints: 8447000c0000110a0350
print unpack ('h*', $raw), "\n"; # prints: 487400c0000011a03005
#need to set binmode when writing raw binary data...
open (BIN, '>', 'test.bin') || die "can't open test.bin";
binmode(BIN);
print BIN $raw;
close BIN;
####
# v1 is a little-endian 16 bit (short) so needs 2 bytes
# if substr didn't limit to 2 bytes substr($raw,1) works also
# unpack will use first 2 bytes.
my ($len) = unpack 'v1',substr($raw,1,2);#substr deals in bytes not nibbles.
print $len,"\n"; #prints 71
print unpack ('v', substr($raw,1)),"\n"; #prints 71
print unpack ('x v', $raw ),"\n"; #prints 71
##
##
record:
unsigned char record_type 8 bits
unsigned short length 16 bits little endian
... some data type and description of these sections...