2010-02-13 20 views
5

Hãy xem xét đoạn mã này:Làm thế nào tôi có thể đóng gói một int như 32 bit lớn endian trong 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; 

Vấn đề là, cố gắng đọc nó từ một ngôn ngữ khác, điều này dường như là little endian. Có bất kỳ đối số mẫu nào cho phép tôi viết nó như là một endian lớn không? Tôi muốn tránh làm thêm khi đọc.

+0

Bạn có nghĩa là 32 * bit * hoặc 32 * byte * không? –

+0

bit. xin lỗi vì điều đó. – Geo

Trả lời

3

Giải pháp là N mẫu.

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

Xem tài liệu pack để biết danh sách tất cả các tùy chọn gói.

+2

Theo Perl 5.10, bạn cũng có thể sử dụng công cụ sửa đổi thứ tự byte ('<' and '>'). Họ không cần thiết ở đây nhưng họ là một ơn trời cho từ quad và điểm nổi. –

+0

Mẹo hay, cảm ơn! Dường như 'I>' cũng tạo ra kết quả đúng. – Geo

Các vấn đề liên quan