मैं एक बाइनरी प्रारूप के लिए एक पार्सर लिख रहा हूं। इस बाइनरी प्रारूप में अलग-अलग टेबल शामिल होते हैं जो बाइनरी प्रारूप में होते हैं, जिसमें आमतौर पर अलग-अलग फ़ील्ड आकार होते हैं (कहीं 50 से 100 के बीच)।द्विआधारी डेटा संरचनाओं को पढ़ने/लिखते समय बिटफील्ड तक पहुंच
इन संरचनाओं में से अधिकांश bitfields होगा और जब सी में प्रतिनिधित्व इस तरह दिखेगा:
struct myHeader
{
unsigned char fieldA : 3
unsigned char fieldB : 2;
unsigned char fieldC : 3;
unsigned short fieldD : 14;
unsigned char fieldE : 4
}
मैं struct मॉड्यूल में आए लेकिन महसूस किया कि अपने न्यूनतम संकल्प एक बाइट और नहीं एक सा हो गया था, अन्यथा इस काम के लिए मॉड्यूल काफी सही था।
मुझे पता है कि बिटफिल्ड को सीटीपीएस का उपयोग करके समर्थित किया जाता है, लेकिन मुझे यकीन नहीं है कि यहां बिटफिल्ड वाले सीटीपीएस स्ट्रक्चर को इंटरफ़ेस कैसे करें।
मेरा दूसरा विकल्प बिट्स में हेरफेर करना है और इसे बाइट्स में खिलााना है और इसे स्ट्रक्चर मॉड्यूल के साथ उपयोग करना है - लेकिन जब से मेरे पास 50-100 विभिन्न प्रकार के संरचनाएं हैं, तो इसके लिए कोड लिखना अधिक त्रुटि हो जाता है- होने का खतरा। मैं दक्षता के बारे में भी चिंतित हूं क्योंकि इस उपकरण का उपयोग बाइनरी डेटा के बड़े गीगाबाइट को पार्स करने के लिए किया जा सकता है।
धन्यवाद।
तीसरे पक्ष बिट सरणी/बिट मैनिपुलेशन पुस्तकालय भी हैं। – agf
यह एक उचित मात्रा में काम होगा, लेकिन आप संभवतः एक वर्ग तैयार कर सकते हैं जो प्रत्येक बिटफील्ड के लिए मास्क के सेट में सी-स्टाइल संरचना परिभाषाओं (या पैकिंग अस्पष्टता को समाप्त करने वाले समान) को पार्स कर सकता है, के माध्यम से डेटा पढ़ें बाइट स्तर तक पहुंचने के लिए संरचना मॉड्यूल, और '__getattr__' पहुंच प्रदान करें। –
हाँ अब मैं इन उपकरणों में आया - [पायथन-बिटस्ट्रिंग] (http://code.google.com/p/python-bitstring/), [निर्माण] (http://construct.wikispaces.com/tut-basics), [बिट्रियर] (https://bitbucket.org/jtoivola/bitreader/wiki/Home) - और उनके दस्तावेज़ों के माध्यम से पढ़ना।बिट रीडर एक व्यवहार्य समाधान की तरह लगता है, लेकिन मैं [यहां] को देखने के (http://blog.mfabrik.com/2010/09/08/bitreader-python-module-for-reading-bits-from-bytes/) कि प्रदर्शन एक बड़ी हिट होने वाला है। जहां तक मैं अपने मूल दस्तावेज से प्राप्त कर सकता हूं, निर्माण बिट फ़ील्ड का समर्थन नहीं करता है। अजगर-bitstring होनहार लग रहा है और गहरी बिट में खुदाई करने के लिए की जरूरत है – Tuxdude