2017-12-17 123 views
7

Để chắc chắn rằng các tính toán của tôi là chính xác cho tất cả các trường hợp, tôi muốn xem kết quả (một số chính xác gấp đôi) dưới dạng một chuỗi nhị phân hoặc chuỗi nhị phân. Làm thế nào tôi có thể nhận được một chuỗi hex/nhị phân hoặc một biểu diễn byte của số này trong Perl? Trong Java, tôi có thể sử dụng, ví dụ,Làm cách nào để chuyển đổi số dấu phẩy động thành chuỗi ký tự hex trong Perl?

double d = performMyCalculations(); 
System.out.format("%x\n", Double.doubleToLongBits(d)); 

cho mục đích này, và nó sẽ in 3fc3333333333333 cho 0.15. Làm cách nào tôi có thể nhận được kết quả tương tự trong số Perl?

Trả lời

9

Các chức năng pack()unpack() của Perl cho phép bạn truyền các biểu diễn nhị phân qua lại.

my $double_bits = unpack "Q", pack "d", 0.15; 
printf "%x\n", $double_bits; 
# Output: 3fc3333333333333 

pack "d" đóng gói gấp đôi làm đại diện nhị phân của nó. Với unpack "Q", chúng tôi giải nén mẫu bit này dưới dạng số nguyên 64 bit không dấu. Vì vậy, reinterprets/này mô hình bit của một đôi để một số nguyên, mà chúng ta có thể sau đó đầu ra với các chữ số hex.

Perl cũng có một lựa chọn định dạng để hiển thị dấu chấm động thập lục phân:

printf "%a\n", 0.15; 
# Output: 0x1.3333333333333p-3 
+0

Cảm ơn! Đó chính xác là những gì tôi cần. Tôi đã nghe nói về 'gói/giải nén', thậm chí đã đọc được perldoc, nhưng không hiểu quá nhiều trong nháy mắt. Bạn thấy đấy, Perl không phải là chuyên môn của tôi :) –

+2

Hoặc chỉ: 'nói giải nén H * ', gói' d ', 0,15;' – ikegami

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