Я подумал, что я должен вмешаться для тех из нас, кому нужно проверить отформатированные двоичные файлы. Это то, что я использую, когда спецификация показывает шестнадцатеричные значения в байтовом порядке не-Intel, как MySQL .frm. Вы можете указать большие куски, увеличив размер sysread. Длина упаковки / распаковки должна быть в 2 раза больше значения sysread. Смещение + = [установить значение sysread].
#!/usr/bin/perl
BEGIN {
use Getopt::Long;
$reverse=0;
GetOptions ("reverse" => \$reverse);
}
my $f=STDIN;
if (int(@ARGV))
{
open(IN, $ARGV[0]) or die "Failed to open $ARGV[0] for reading.\n$!";
$f=IN;
}
my $count=1;
my $offset=0;
my $after_nl=1;
while (sysread($f,$buf,2))
{
my $hex = unpack('H4', $buf);
$hex=join("",(split(//,$hex))[2,3,0,1]) unless $reverse;
if (($count % 8) == 0)
{
printf "%s\n", $hex;
$after_nl=1;
$offset += 2;
}
else
{
printf "%08x ", $offset if $after_nl;
printf "%s ", $hex;
$offset += 2;
$after_nl=0;
}
$count++;
}