2010-02-13 10 views
5

Betrachten Sie diesen Code-Schnipsel:Wie kann ich ein Int als 32 Bit großes Endian in Perl packen?

use strict; 
use warnings; 

my $data = "1"; 
my $packed = pack("I",$data); 
open(my $file,">","test.bin") || die "error $!\n"; 
binmode $file; 
print $file $packed; 

Die Sache ist, versucht, es aus einer anderen Sprache zu lesen, scheint dies wenig Endian zu sein. Gibt es irgendein Template-Argument, das es mir erlaubt, es als Big Endian zu schreiben? Ich möchte vermeiden, zusätzliche Arbeit beim Lesen zu tun.

+0

Meinst du 32 * Bits * oder 32 * Bytes *? –

+0

Bits. Das tut mir leid. – Geo

Antwort

3

Die Lösung der N Vorlage ist.

my $packed = pack "N", $data; 

Siehe pack Dokumentation für eine Liste aller Pack-Optionen.

+2

Ab Perl 5.10 können Sie auch Bytereihenfolge-Modifizierer ('<' and '>') verwenden. Sie sind hier nicht notwendig, aber sie sind ein Glücksfall für Quad-Wörter und Fließkomma. –

+0

Netter Tipp, danke! Es scheint, dass 'I>' auch das richtige Ergebnis erzeugt. – Geo