2017-12-17 121 views
7

यह सुनिश्चित करने के लिए कि मेरी गणना सभी मामलों के लिए सही है, मैं एक हेक्स या बाइनरी स्ट्रिंग के रूप में परिणाम (एक डबल परिशुद्धता संख्या) देखना चाहता हूं। मैं Perl में हेक्स/बाइनरी स्ट्रिंग या इस संख्या का बाइट प्रतिनिधित्व कैसे प्राप्त कर सकता हूं? Java में, मैं इस्तेमाल कर सकते हैं, उदाहरण के लिए,मैं फ़्लोटिंग-पॉइंट नंबर को पर्ल में हेक्स स्ट्रिंग में कैसे परिवर्तित करूं?

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

इस उद्देश्य के लिए, और यह 0.15 के लिए 3fc3333333333333 प्रिंट होगा। मैं Perl में एक समान परिणाम कैसे प्राप्त कर सकता हूं?

उत्तर

9

पर्ल का pack() और unpack() फ़ंक्शंस आपको बाइनरी प्रस्तुतियों को आगे और आगे डालने की अनुमति देता है।

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

pack "d" पैक अपने द्विआधारी प्रतिनिधित्व के रूप में एक डबल। unpack "Q" के साथ हम इस बिट पैटर्न को एक हस्ताक्षरित 64-बिट पूर्णांक के रूप में अनपैक करते हैं। तो यह दोहराए गए बिट पैटर्न को एक पूर्णांक में दोहराता है, जिसे हम हेक्स अंकों के साथ आउटपुट कर सकते हैं।

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

धन्यवाद:

पर्ल भी प्रदर्शित करने के लिए हेक्साडेसिमल फ्लोटिंग बिंदु एक स्वरूपण का विकल्प है! यही वही है जो मुझे चाहिए। मैंने 'पैक/अनपैक 'के बारे में सुना है, यहां तक ​​कि पेल्डडोक भी पढ़ा है, लेकिन एक नज़र में बहुत ज्यादा समझ में नहीं आया है। आप देखते हैं, पर्ल मेरी विशेषता नहीं है :) –

+2

या बस: 'अनपैक एच *', पैक 'डी', 0.15; ' – ikegami

संबंधित मुद्दे

 संबंधित मुद्दे