पायथन में मैं इसे एक स्ट्रिंग में पढ़कर और struct.unpack(...)
का उपयोग करके एक बाइनरी फ़ाइल तक पहुंच रहा हूं। अब मैं struct.pack_into(...)
का उपयोग कर उस स्ट्रिंग को लिखना चाहता हूं, लेकिन मुझे त्रुटि त्रुटि मिलती है "स्ट्रिंग का उपयोग संशोधित बफर के रूप में नहीं कर सकता"। struct
मॉड्यूल के साथ उपयोग के लिए उपयुक्त बफर क्या होगा?पायथन के स्ट्रक्चर मॉड्यूल के लिए उपयुक्त बफर क्या है
उत्तर
यदि आप इसे किसी विशिष्ट ऑब्जेक्ट में पैक करने की कोशिश नहीं कर रहे हैं, तो बस स्ट्रिंग को वापस करने के लिए struct.pack
का उपयोग करें।
अन्यथा, ctypes.create_string_buffer
एक परिवर्तनीय बफर प्राप्त करने का एक तरीका है।
का उपयोग कर रहा हूं बफर एक साधारण आभासी मशीन के लिए स्मृति है, इसलिए मुझे एक विशिष्ट वस्तु में पैक करने की आवश्यकता है। स्मृति छोटी है लेकिन एकल स्मृति पहुंच के लिए 128-512k की प्रतिलिपि बनाना एक विकल्प नहीं है। – mdm
जैसा कि एक अन्य उत्तर में उल्लेख किया गया है, struct_pack
शायद आपको चाहिए और उपयोग करना चाहिए। हालांकि, प्रकार array की वस्तुओं बफर प्रोटोकॉल का समर्थन और संशोधित किया जा सकता:
>>> import array, struct
>>> a = array.array('c', ' ' * 1000)
>>> c = 'a'; i = 1
>>> struct.pack_into('ci', a, -0, c, i)
>>> a
array('c', 'a\x00\x00\x00\x01\x00\x00\x00 ...
मूल बफर प्रोटोकॉल मुख्य रूप से सी एक्सटेंशन के लिए हैक का एक सा था। इसे हटा दिया गया है और पाइथन 3 (और आने वाले 2.7 में) new C-level buffer API and memoryview objects द्वारा प्रतिस्थापित किया गया है।
आप किस पायथन का उपयोग कर रहे हैं? मैंने structs के साथ थोड़ा सा खेला है लेकिन हेवन 'पहले देखा था। – chrism1
मैं पाइथन 2.6.4 – mdm