【发布时间】:2015-06-07 04:25:43
【问题描述】:
我有一个二进制文件,其中一个接一个地存储了一堆数据块。数据块格式如下:
Length [byte] Content Description
2 0xFFFF Data block header
4 Epoch time seconds since 00:00:00 UTC, January 1, 1970
2 value of N Length of data following this value
N Data Data itself
我尝试使用unpack,但是由于数据长度不固定,所以这是错误的。
我需要编写一个子程序,它将读取和解析数据块(每次调用子程序时一个数据块)直到文件结束。
文件正在使用big-endian。
这是我到目前为止所尝试的:
use strict;
use warnings;
my $filename;
if (! $ARGV[0])
{
die "Input filename is required";
}
sub setFile
{
$filename = $_[0];
}
my $inFile = $ARGV[0];
setFile($inFile);
open INFILE, $filename or die "\nUnable to open input file";
binmode INFILE;
my $nbytes;
while (<INFILE>) {
my( $header, $timestamp_hex, $datalength_hex ) = unpack 'H4 H8 H4', $_;
my $timestamp = hex($timestamp_hex);
my $datalength = hex($datalength_hex);
print "$timestamp $datalength\n";
for (my $i = 0; $i < $datalength; $i++)
{
my $data = unpack 'H', $_;
print "$data";
}
print "\n";
}
close INFILE
or die "Error while closing $filename: $!\n";
【问题讨论】:
-
您是否尝试在
binmode中打开文件,然后尝试读取该文件。