में तेजी से बाइनरी डेटा रूपांतरण पाइथन में एक बाइनरी डेटा स्ट्रिंग को एक संख्यात्मक मान में बदलने के लिए सबसे तेज़ तरीका क्या है?पायथन
मैं struct.unpack_from()
का उपयोग कर रहा हूं, लेकिन प्रदर्शन सीमा को मार रहा हूं।
संदर्भ: एक आने वाली धारा मिश्रित बाइनरी और ASCII डेटा है। एएससीआईआई डेटा रूपांतरण सी में हालांकि सीटीपीएस में किया जाता है। सीटीपीएस के माध्यम से सी में अनपॅकिंग को लागू करने से अनपॅक करने के लिए समान प्रदर्शन हुआ। मेरा अनुमान है कि कॉल ओवरहेड एक कारक का बहुत अधिक था। मैं एक मूल सी-जैसे जबरदस्त विधि (हालांकि अन-पायथनिक) खोजने की उम्मीद कर रहा था। सबसे अधिक संभावना है कि इस कोड के सभी को सी
स्ट्रीम को नेटवर्क बाइट ऑर्डर (बड़े-एंडियन) में जाना होगा और मशीन छोटी-छोटी है। एक उदाहरण रूपांतरण होगा:
import struct
network_stream = struct.pack('>I', 0x12345678)
(converted_int,) = struct.unpack_from('>I', network_stream, 0)
मैं स्ट्रीम प्रारूप से निपटने, द्विआधारी रूपांतरण के सामान्य मामले से के बारे में कम चिंतित हूँ, और अगर वहाँ unpack
को भी एक विकल्प। उदाहरण के लिए, socket.ntohl()
को एक int की आवश्यकता होती है, और int()
बाइनरी डेटा स्ट्रिंग को परिवर्तित नहीं करेगा।
आपके सुझावों के लिए धन्यवाद!
आप वास्तव में क्या अनपॅक कर रहे हैं? क्या यह संख्यात्मक मूल्यों की एक समान सरणी है? –
दुर्भाग्य से यह सिंगलेट्स की मिश्रित धारा है, जहां सामग्री शीर्षलेख द्वारा इंगित की जाती है। अधिकांश रूपांतरण 4 बी पूर्णांक और फ्लोट के लिए है। – CNK
परीक्षण केस अच्छा होगा – Triptych