0

unpack 関数を使用して、バイナリ ファイルの内容を 16 進数に変換しています。

私は次のようにしています:

#! /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";

これにより、バイナリ入力ファイルの内容が 16 進文字列として出力されます。

ただし、問題は、バイナリ ファイルの内容を解析しているときに、バイト 0xa (改行文字) に遭遇すると、その時点で unpack 関数が停止することです。

この結果、 $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 によって解析されません。

それで、改行文字に遭遇すると解析を停止しないように、完全なバイナリ ファイルに unpack を使用する方法はありますか?

ありがとう。

4

1 に答える 1

3

どう思いますか

my $value = <INPUT>;

ですか?ラインを読む、つまり 0A まで読む。修理:

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

また、追加したい

binmode(INPUT);

の後open

于 2012-11-08T08:12:01.320 に答える