以前、ファイルの中身を16進ダンプで出力するperlスクリプト dumpHexStr.pl を紹介した。
akrad.hatenablog.com
ところが、これではファイル内に改行があった場合にそれが省かれてしまうので、改行も含めて16進ダンプするようにした。
use strict; use warnings; my $inFile = $ARGV[0]; if (!-f $inFile) { die "There is not $inFile file..."; } my $outFile = "dumped_" . $inFile; open(my $inFh, "< $inFile") or die("Error :$!"); open(my $outFh, "> $outFile") or die("Error :$!"); binmode($inFh); while (my $line = <$inFh>) { my $hexDump = unpack("H*", $line); print($outFh $hexDump) } close($inFh); close($outFh);
使い方は、以前のものと同じ。
なお、
binmode($inFh);
としているのは、ファイルから読み込んだ改行コードをそのまま扱うため。
# Windows上で実機検証したところ、binmode しない状態だと、読み込んだ CRLF(0d0a) が LF(0a) に変換されてしまった。
binmodeしないと、perl は ascii mode で改行を読む込むわけだが、perl は元々UNIX上で動くプログラムなので、UNIXのデフォルトの改行コードである LF(0a) に勝手に変換されるのではないか、と推測している。