2010-01-21 11 views
11

में स्ट्रिंग्स में हेक्साडेसिमल संख्याओं को परिवर्तित करने में, मेरे पास लॉग फाइलों में हेक्साडेसिमल तारों के रूप में प्रतिनिधित्व संख्याओं का एक गुच्छा है जिसे पर्ल स्क्रिप्ट द्वारा पार्स किया जा रहा है, और मैं पर्ल के साथ तुलनात्मक रूप से अनुभवहीन हूं।पर्ल

इनमें से कुछ संख्याएं वास्तव में नकारात्मक संख्याओं पर हस्ताक्षर किए जाते हैं, यानी 0xFFFE == -2 जब 16-बिट हस्ताक्षरित पूर्णांक के रूप में दर्शाया जाता है।

क्या कोई मुझे कृपया इस नंबर के हस्ताक्षरित प्रतिनिधित्व को पर्ल में स्ट्रिंग FFFE से प्राप्त करने का तरीका बता सकता है, या अन्यथा मुझे ट्यूटोरियल या अन्य संसाधन पर इंगित कर सकता है?

+5

बस एफडब्ल्यूआईडब्ल्यू, कम से कम 2 के पूरक में, एफएफएफई -2 - एफएफएफएफ -1 है। –

+0

एर, वूप्स। तुम बिल्कुल सही हो, मैं सोच नहीं रहा था। –

उत्तर

20

आप हेक्साडेसिमल से दशमलव तक कनवर्ट करने के लिए hex() फ़ंक्शन का उपयोग कर सकते हैं, लेकिन यह इनपुट को एक हस्ताक्षरित मान के रूप में व्याख्या करता है। उस के लिए क्षतिपूर्ति के लिए, एक अहस्ताक्षरित मात्रा के रूप में दशमलव मान पैक और एक हस्ताक्षरित एक के रूप में खोल दे:

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

क्रमशः 'एस' टेम्पलेट्स, पर हस्ताक्षर किए और अहस्ताक्षरित 16-बिट मात्रा के लिए कर रहे हैं The 'एस' और। अन्य टेम्पलेट्स और उपयोग की जानकारी के लिए pack फ़ंक्शन के लिए दस्तावेज़ देखें।

+4

मैं चाहता हूं कि अधिक लोगों को पैक के बारे में पता था। यह एक अद्भुत उपकरण है। :) –

+0

कम से कम एक और अब करता है। यह वही था जो मुझे चाहिए था, आपको बहुत धन्यवाद माइकल। –

1
print unpack('s>', pack('H4', 'FFFE')); 
-2