2010-02-13 13 views
5

Considere la siguiente:¿Cómo puedo empaquetar un int como big endian de 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 cosa es, tratando de leer desde otro lenguaje, esto parece ser poco endian. ¿Hay algún argumento de plantilla que me permita escribirlo como Big Endian? Me gustaría evitar hacer un trabajo extra al leer.

+0

¿Se refiere a 32 * bits * o 32 * bytes *? –

+0

bits. Lo siento por eso. – Geo

Respuesta

3

La solución es la plantilla N.

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

Consulte la documentación pack para obtener una lista de todas las opciones de carga.

+2

A partir de Perl 5.10 también puede usar modificadores de orden de bytes ('<' and '>'). No son necesarios aquí, pero son un regalo del cielo para palabras cuádruples y punto flotante. –

+0

Buen consejo, gracias! Parece que 'I>' también produce el resultado correcto. – Geo

Cuestiones relacionadas