我想我会为我们这些需要检查格式化二进制文件的人插话。当规范以非英特尔字节顺序(如 MySQL .frm 规范)显示十六进制值时,这是我使用的。您可以通过增加 sysread 大小来指定更大的块。打包/解包长度必须是 sysread 值的 2 倍。偏移量 += [设置为 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++;
}