私が抱えている問題は、STDIN経由でデータを読み取っているPerlスクリプトがあり、ストリームにラインターミネータ "0A"が含まれているためです。その後、私は16進データを変換すると、それは壊れています(16進形式の0Aがありません)。だから、私はどのようにPerlでラインフィード "0A"の "ウィンドウ"バージョンを検出できますか?Perlがバイナリストリームを16進数に変換する
注:LinuxのOS(Perlが)のWindows PE
!usr/bin/perl
while($line = <STDIN>)
{
chomp($line);
@bytes = split //, $line;
foreach (@bytes)
{
printf "%02lx", ord $_;
}
}
使用例読んでいる:あなたのループでは
[[email protected] test]# cat test.exe | perl encoder.pl > output
うわー、それは恥ずかしいです。私は 'binmode()'を使いこなすことにまっすぐ夢中になり、 'chomp'も見ていませんでした。 –
また、 'unpack( 'H *'、$ binary_string)'は 'split'や' printf '%02x'より効率的です。 ! – cjm
は のbinmode(STDIN)変更#/ usr/bin/perlを作っ。 一方() {#printの$ _。 push(@bytes、$ _); } foreachの(@bytes) {printfの "%の02lx"、ORDの$ _。 } –
ekronnenburg