2017-12-17 180 views
7

Hesaplamalarimin tüm durumlar için doğru olduğundan emin olmak için, sonucu (çift duyarlıklı bir sayı) hex veya binary string olarak görmek istiyorum. Bir hex/binary string veya Perl numaralı telefondan bu numaranın bayt gösterimini nasıl alabilirim? Java, ben bu amaç için, örneğin,Kayan nokta sayısını Perl'deki bir hex dizesine nasıl dönüştürebilirim?

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

kullanabilir ve bunun 0.15 için 3fc3333333333333 yazdırılır. Perl da benzer bir sonucu nasıl alabilirim?

cevap

9

Perl'in pack() ve unpack() işlevleri, ikili sunumları ileri ve geri atmanıza olanak tanır.

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

onun ikili gösterimi gibi bir çift pack "d" paketleri. unpack "Q" ile bu bit desenini, imzasız bir 64 bit tam sayı olarak paketliyoruz. Böylece bu, bir çiftin bit modelini bir tam sayıya dönüştürür/çevirir ve ondan sonra onaltılık basamaklarla çıktılar.

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

Teşekkür:

Perl da onaltılık kayan noktası görüntülemek için bir biçimlendirme seçeneği vardır! Tam olarak ihtiyacım olan şey bu. “Pack/unpack” hakkında bir şeyler duydum, hatta perldoc'u okudum ama bir bakışta çok fazla anlamadım. Görüyorsunuz, Perl benim uzmanlık alanım değil :) –

+2

Ya da sadece: 'H paketini aç, 'd', 0.15;' – ikegami