您正在读取的数据的Endianness在这里很重要。您似乎正在将8个八位字节解压为两个以小端顺序存储的long。您确定它不是单一的64位数量(这将使q或{}格式更合适)?不幸的是,我在32位机器上,所以我的perl不支持Q。在
但是,以下几点应该为您指明正确的方向:#!/usr/bin/env perl
use strict; use warnings;
use autodie;
use Fcntl qw(:seek);
use List::Util qw( sum );
my ($input_file) = @ARGV;
die "Need input file\n" unless defined $input_file;
my $HEADER_SIZE = 4_096;
my @typedef = (
{
fields => [
qw(
TS_INCR_LO
TS_INCR_HI
SEQID
OP
LUN
NBLKS
LBA_LO
LBA_HI
)
],
tmpl => 'LLLSSLLL',
start => 0,
size => 28,
},
{
fields => [
qw(
TS_INCR_LO
TS_INCR_HI
SEQID
OP
LUN</