我在这里不知所措,这似乎是一个简单的问题,所以我希望有一个简单的答案!
我有一个二进制文件(大约 35m),从偏移量 1536 开始,每 2048 个字节有 64 个字节的填充数据 - 我只想删除这个填充。
第一次出现是 1536,然后是 3648、5760、7872 等
(2112 字节 - 64 字节的虚拟数据 = 2048)
我已经尝试过 bvi、bbe、hexdump+sed+xxd,但我显然遗漏了一些东西。
提前致谢,
我在这里不知所措,这似乎是一个简单的问题,所以我希望有一个简单的答案!
我有一个二进制文件(大约 35m),从偏移量 1536 开始,每 2048 个字节有 64 个字节的填充数据 - 我只想删除这个填充。
第一次出现是 1536,然后是 3648、5760、7872 等
(2112 字节 - 64 字节的虚拟数据 = 2048)
我已经尝试过 bvi、bbe、hexdump+sed+xxd,但我显然遗漏了一些东西。
提前致谢,
您没有显示任何代码,所以我认为您需要帮助来了解算法。其实很简单:
在 Perl 中,
binmode(STDIN);
binmode(STDOUT);
while (1) {
my $rv = read(STDIN, my $rec, 2112);
die $! if !defined($rv);
last if !$rv;
substr($rec, 1536, 64, '');
print($rec)
or die $!;
}
如果你想使用 Perl:
打开带有:raw
图层的文件。我们不想要:utf8
或:crlf
翻译。
然后,我们可以搜索到我们感兴趣的位置,并且可以读取几个字节
my $size = -s $filename;
open my $fh, "<:raw", $filename;
for (seek($fh, 1536, 0) ; tell($fh) + 2048 < $size ; seek($fh, 2048 - 64, 1)) {
read $fh, my $buffer, 64;
...;
}
读
perldoc -f tell
perldoc -f seek
perldoc -f read
了解更多信息