2012-11-08 46 views
0

我正在使用解压函数将二进制文件的内容转换为十六进制。Perl解压缩和换行符

我这样做如下:

#! /usr/bin/perl 

use strict; 
use warnings; 

my $input=$ARGV[0]; 

open(INPUT,'<',$input) || die("Couldn't open the file, $input with error: $!\n"); 
my $value=<INPUT>; 
$value=unpack("H*",$value); 

print $value,"\n"; 

这将输出二进制输入文件为十六进制字符串的内容。

但是,问题在于,在解析二进制文件的内容时,如果遇到字节0xa(换行符),则解包功能在该点停止。

由于这个原因,我得到了$ value变量中的不完整输出。

几个例子:

65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 BA DC 95 DC FE BD 

FE FF FF FF 07 00 00 00 08 00 00 00 09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 

所有字节后的内容,是0xA不会被解包解析。

那么,有没有办法使用解压缩完整的二进制文件,以便它不会停止解析,一旦遇到新的行字符?

谢谢。

+0

好的,我自己找到了解决方案。我需要在读取文件之前启用slurp模式。当地$ /是否:) –

+1

霓虹灯闪光:你可以添加,作为你自己的答案并接受它。 – ysth

回答

3

你觉得

my $value = <INPUT>; 

呢?读一条线,也就是说读到0A。修复:

my $value; 
{ local $/; $value = <INPUT>; } 

而且,你想要的open后添加

binmode(INPUT);