2016-07-27 9 views
2

私はPerlで画像を読み込むには、読み:Perlでバイナリファイルから最後の16バイトを取得するには?

open (FILE,"<$filename") or die $!; 
      binmode FILE; 
      while (($n = read FILE, $data, 4) != 0) { 
       $buf .= $data; 
      } 
close (FILE); 

を私はこのファイルからのみ、最後の16のバイトを取得できますか? Backgoundは、画像の最後の16バイトを別の画像の最後の16バイトと比較したいのです。

+0

あなたはperlのV5を使用している場合.6.0以降では、範囲外になると自動的に閉じる字句ファイルハンドルと、3-arg 'open'(悪意を持ったファイルは2-argの' open'で開かれたときに任意のプログラムを実行できます)を使うべきです: '私の$ file、 '<'、$ filenameまたはdie $!'を開きます。 'binmode'も失敗する可能性がありますので、戻り値を確認することをお勧めします。 – Slade

+0

ありがとうございました! – hfmAH

答えて

6

使用seekは16バイトのファイル終了前の位置に移動し、16のバイトを読むために:

open (FILE, "<$filename") or die $!; 
binmode FILE; 
seek FILE, -16, 2; 
read FILE, $data, 16; 
close (FILE); 

あなたはまた、代わりに2の定数を使用することができます

use Fcntl qw(SEEK_END); 

open (FILE, "<$filename") or die $!; 
binmode FILE; 
seek FILE, -16, SEEK_END; 
read FILE, $data, 16; 
close (FILE); 
関連する問題