2010-02-13 13 views
5

Tenir compte cet extrait:Comment puis-je empaqueter un int en tant que big endian 32 bits en Perl?

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; 

La chose est, en essayant de le lire d'une autre langue, cela semble être peu endian. Existe-t-il un argument de modèle qui me permette de l'écrire en big endian? Je voudrais éviter de faire du travail supplémentaire en lisant.

+0

Voulez-vous dire 32 * bits * ou 32 * octets *? –

+0

bits. Désolé pour ça. – Geo

Répondre

3

La solution est le modèle N.

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

Voir la documentation pack pour une liste de toutes les options d'emballage.

+2

À partir de Perl 5.10, vous pouvez également utiliser des modificateurs d'ordre d'octets ('<' and '>'). Ils ne sont pas nécessaires ici, mais ils sont une aubaine pour les mots quadruples et à virgule flottante. –

+0

Bon conseil, merci! Il semble que 'I>' produise aussi le bon résultat. – Geo

Questions connexes