2010-01-21 46 views
11

Tôi có một số số được biểu diễn dưới dạng chuỗi thập lục phân trong tệp nhật ký đang được phân tích bằng tập lệnh Perl và tôi khá thiếu kinh nghiệm với Perl.Chuyển đổi số thập lục phân thành chuỗi thành số âm, trong Perl

Một số những con số này thực sự là số âm đã ký, tức là 0xFFFE == -2 khi được biểu diễn dưới dạng số nguyên được ký 16 bit.

Ai đó có thể vui lòng cho tôi biết cách đại diện có chữ ký của số này từ chuỗi FFFE trong Perl hoặc nói cách khác là hướng dẫn hoặc tài nguyên khác?

+5

Chỉ FWIW, ít nhất là trong phần bổ sung của 2, FFFE là -2 - FFFF là -1. –

+0

Err, rất tiếc. Bạn hoàn toàn đúng, tôi đã không suy nghĩ. –

Trả lời

20

Bạn có thể sử dụng hàm hex() để chuyển đổi từ thập lục phân sang thập phân, nhưng nó diễn giải đầu vào dưới dạng giá trị chưa ký. Để bù đắp cho rằng, gói giá trị thập phân như một số lượng unsigned và giải nén nó như là một ký một:

my $num = unpack('s', pack('S', hex('FFFE'))); 

's' Các và 'S' mẫu là dành cho số lượng 16-bit signed và unsigned, tương ứng. Xem tài liệu về chức năng pack cho các mẫu và thông tin sử dụng khác.

+4

Tôi muốn nhiều người biết về gói hơn. Đó là một công cụ tuyệt vời. :) –

+0

Hiện tại, ít nhất một người nữa. Đây chính xác là những gì tôi cần, cảm ơn Michael rất nhiều. –

1
print unpack('s>', pack('H4', 'FFFE')); 
-2 
Các vấn đề liên quan