Perl-解析二进制文件并返回指定偏移量处的值

Perl-解析二进制文件并返回指定偏移量处的值,perl,binary,hex,offset,Perl,Binary,Hex,Offset,我有一个二进制文件,我需要能够解析通过。我要做的是指定一个偏移量,然后让程序返回该位置的字节值 我不确定的是怎么做。我已经打开了文件部分,但我不知道如何让程序跳转到该位置 任何帮助都将不胜感激 谢谢。使用Fcntl qw(:seek); use Fcntl qw(:seek); my($fh, $filename, $byte_position, $byte_value); $filename = "/some/file/name/goes/here"; $byte_positio

我有一个二进制文件,我需要能够解析通过。我要做的是指定一个偏移量,然后让程序返回该位置的字节值

我不确定的是怎么做。我已经打开了文件部分,但我不知道如何让程序跳转到该位置

任何帮助都将不胜感激

谢谢。

使用Fcntl qw(:seek);
use Fcntl qw(:seek);

my($fh, $filename, $byte_position, $byte_value);

$filename      = "/some/file/name/goes/here";
$byte_position = 42;

open($fh, "<", $filename)
  || die "can't open $filename: $!";

binmode($fh)
  || die "can't binmode $filename";

sysseek($fh, $byte_position, SEEK_CUR)  # NB: 0-based
  || die "couldn't see to byte $byte_position in $filename: $!";

sysread($fh, $byte_value, 1) == 1
  || die "couldn't read byte from $filename: $!";

printf "read byte with ordinal value %#02x at position %d\n",
     ord($byte_value), $byte_position;
我的($fh,$filename,$byte\u位置,$byte\u值); $filename=“/some/file/name/goes/here”; $byte_位置=42; 打开($fh),使用模块中的方便常数,如中所示

!/usr/bin/env perl
使用字节;
严格使用;
使用警告;
使用Fcntl':seek';

打开我的$fh,”你能展示一下到目前为止你都做了些什么吗?我在看seek,但我不知道该怎么处理它。我是要把它放入一个变量中打印,还是需要其他东西来实际提取我们的字节数据?tchrist,你太棒了。这正是我需要的。你可以依赖并教autodie,将SLOC切成两半。是固定的。@daxim O只有当你每次都非常小心地编写
使用autodie v2.12
时,我才相信人们会这么做,我也不相信。记住,这必须在基本的Perl安装供应商上运行。我还担心人们在没有它的情况下会剪断它的一部分,在这种情况下,他们会遇到很大的麻烦。这是一个可爱的快速功能,但是您必须非常小心地使用这些建议。可能不应该将这些字节打印为字符:您不知道编码方式。另外,如果将PERL_UNICODE设置为带有S的内容,PERL会将其视为代码点,并可能在您认为只得到1的情况下写出多个字节。