在二进制文件中,每2048个字节删除64个字节

2024-06-16 09:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里无所适从,这似乎是一个如此简单的问题,所以我希望有一个简单的答案!在

我有一个二进制文件(大约35m),每2048字节有64个字节的填充数据,从偏移量1536开始-我只想删除这个填充。在

第一次出现是1536次,然后是364857607872次,以此类推

(2112字节-64字节的虚拟数据=2048)

我试过bvi,bbe,hextump+sed+xxd,显然我遗漏了一些东西。在

提前谢谢你


Tags: 文件数据答案字节二进制sed偏移量遗漏
2条回答

你没有显示任何代码,所以我想你需要帮助来理解算法。其实很简单:

  1. 虽然你还没有达到STDIN的EOF,
    1. 从STDIN读取2112字节
    2. 从读取的字节数中,删除从1536开始的64个字节。在
    3. 将剩余的2048字节打印到STDOUT。在

在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

更多信息

相关问题 更多 >