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 を使用する方法はありますか?
ありがとう。