Perl解包和换行符

时间:2012-11-08 06:21:39

标签: perl unpack

我正在使用unpack函数将二进制文件的内容转换为十六进制。

我这样做:

#! /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不会被解包解析。

那么,是否有一种方法可以将unpack用于完整的二进制文件,以便在遇到新行字符时不会停止解析?

感谢。

1 个答案:

答案 0 :(得分:3)

您的想法

my $value = <INPUT>;

呢?读一行,即读到0A。修正:

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

此外,您要添加

binmode(INPUT);

open之后。