2016-07-27 3 views
2

las ich ein Bild mit Perl lesen:Wie bekomme ich die letzten 16 Bytes aus der Binärdatei mit Perl?

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

Wie kann ich aus dieser Datei nur die letzten 16 Bytes bekommen? Backgound ist, dass ich die letzten 16 Bytes von einem Bild mit den letzten 16 Bytes von einem anderen Bild vergleichen möchte.

+0

Wenn Sie Perl v5 .6.0 oder neuer, sollten Sie lexikalische Dateihandles verwenden (die automatisch schließen, wenn sie den Gültigkeitsbereich verlassen) und 3-arg 'open' (eine böswillig benannte Datei kann beliebige Programme ausführen, wenn sie mit 2-arg' open' geöffnet wird) : 'öffne meine $ Datei, '<', $ Dateiname oder die $!'. Es ist auch möglich, dass "binmode" fehlschlägt, daher ist es eine gute Idee, den Rückgabewert zu überprüfen. – Slade

+0

Vielen Dank für Ihren Hinweis! – hfmAH

Antwort

6

Verwenden seek bewegen 16 Byte vor Dateiende zu positionieren, und dann die 16 Byte lesen:

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

Sie auch Konstante verwenden können statt 2:

use Fcntl qw(SEEK_END); 

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