मेरे पास एक जावा प्रोग्राम है जो अंतरिक्ष से अलग हेक्साडेसिमल प्रारूप में, नेटवर्क पर प्राप्त कच्चे पैकेट के 16 बाइट्स में थूकता है। चूंकि मैं उस कोड को बदलना नहीं चाहता, इसलिए मैं परिणाम को पर्ल स्क्रिप्ट पर पाइप कर रहा हूं, सैद्धांतिक रूप से, unpack
यह STDIN
से पहचानने योग्य चर में हो सकता है। निम्नलिखित मेरी पर्ल फाइल करने के लिए लाइन इनपुट का एक नमूना है:पर्ल में अनपॅक किए गए स्पेस से अलग एसटीडीआईएन हेक्स स्ट्रिंग्स को मैं कैसे पार्स कर सकता हूं?
FF FF 09 7D 10 01 07 01 00 02 00 1D 00 00 00 00 00 06 00 07 00 |--garbage-----|c--|c--|int---|int---|int---|int---|int---|int---|int---|
मैं शुरू में unpack
उपयोग करने के लिए सफाई से प्रत्येक इनपुट को अलग करना चाहता था (ग, 16bit पूर्णांक चर के लिए पूर्णांक चार/बाइट के लिए है) मुझे आवश्यक चर में लाइन। हालांकि, स्ट्रिंग में स्पेस डिलीमिट की वजह से, मुझे यकीन नहीं है कि इसे कैसे संभाला जाए (मैं 'ए' को टेम्पलेट के रूप में उपयोग कर सकता हूं, लेकिन फिर भी मैं स्प्लिट का उपयोग कर सकता हूं!)
क्या कोई शानदार तरीका है unpack()
का उपयोग करने के लिए? मैं एक पर्ल मास्टर नहीं हूं, लेकिन दूसरा तरीका है, जैसा कि मैंने पहले सुझाव दिया था, split
का उपयोग करें और फिर प्रत्येक हेक्स को बाइट में मैन्युअल रूप से परिवर्तित करें, और उसके बाद मैं जो चाहता हूं उसे प्राप्त करने के लिए बिट मैनिपुलेशन और मास्क का उपयोग करें। कोई अन्य सुझाव (यदि unpack
दिन बचा नहीं है)?
आप इसे 'मैप {हेक्स} स्प्लिट' कहकर सुंदर दिख सकते हैं :) – friedo
या यहां तक कि सिर्फ 'नक्शा हेक्स, विभाजन' - लगभग हास्केल! –
असल में मैंने पुष्टि की कि बाइट थोड़ा एंडियन में हैं। wierd, क्योंकि वे एक नेटवर्क पर भेजे जाते हैं, मैंने सोचा होगा कि नेटवर्क आदेश में होना चाहिए था। ओह ठीक है, फिर एकमात्र परिवर्तन "x5C2n7" को अनपैक करने के लिए "x5C2n7" अनपैक करने की आवश्यकता है, है ना? और उत्तर के लिए धन्यवाद ... यह मंच अद्भुत है – intiha