my( $width, $height ) = unpack 'I2', substr $data, $offset, 8; #### print "$width : $height"; 327680 : 262144; #### printf "%u : %u\n", unpack 'V2', substr $data, $offset, 8; 1280 : 1024 #### ## Assume the first 8 bytes are a double in the 'other' endianess. ## And the next 4 a float. my $data = ...; my $doublePackedOtherEndian = substr $data, 0, 8; my $floatPackedOtherEndian = substr $data, 9, 4; ## Now reverse the bytes my $doublePackMyEndian = reverse $doublePackedOtherEndian; my $floatPackedMyEndian = reverse my $floatPackedOtherEndian; ## And unpack my $double = unpack 'd', $doublePackMyEndian; my $float = unpack 'f', $floatPackedMyEndian;