首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么重写二进制文件不起作用?

为什么重写二进制文件不起作用?
EN

Stack Overflow用户
提问于 2012-01-20 19:16:52
回答 1查看 99关注 0票数 1

我差不多有tar.gz文件了。在解包之前,我需要跳过一些字节,然后解压它,更改一些内容,然后再次打包。

代码语言:javascript
复制
 #!perl

 open (my $src, "<", $path) or die $!;
 binmode($src);
 seek($src, $magicNumber,0);

 open(my $tgz, ">", $path . ".tar.gz");
 binmode($tgz);

 #while(<$src>){
 #    print $tgz $_;
 #}
 my $n; my $data;
 while(($n = read $src, $data, 4) != 0){
     print $tgz $data;
 }

为什么使用未注释版本会生成比未注释版本更短的文件(中间跳过字节)。如果文件末尾被破坏,但生成的文件在中间的某个地方不同,我会理解。对此有什么解释吗?

不幸的是,我不被允许上传复制问题的文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-20 20:30:46

对二进制文件使用像foreach(<$src>)这样的结构通常不是很好,因为它是在行模式下读取的(并且二进制文件没有行的概念)。

如果你在你的文件之间做二进制比较,我会猜测你缺少的字节要么是CR,要么是LF。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8940582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档