2011-11-25 7 views

उत्तर

12

आप नौकरी करने के लिए memoryview का उपयोग कर सकते हैं। उदाहरण के लिए:

dest = bytearray(10) # all zero bytes 
v = memoryview(dest) 
ioObject.readinto(v[3:]) 
print(repr(dest)) 

यह मानते हुए कि iObject.readinto(...) बाइट्स 1, 2, 3, 4, और 5 पढ़ता है तो इस कोड को प्रिंट:

bytearray(b'\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00') 

तुम भी struct.unpack_from और struct.pack_into साथ memoryview वस्तु का उपयोग कर सकते हैं। उदाहरण के लिए:

dest = bytearray(10) # all zero bytes 
v = memoryview(dest) 
struct.pack_into("2c", v[3:5], 0, b'\x07', b'\x08') 
print(repr(dest)) 

इस कोड को प्रिंट

bytearray(b'\x00\x00\x00\x07\x08\x00\x00\x00\x00\x00') 
+0

मेरे इरादा एक ऑफसेट पर bytearray में सीधे पढ़ा है, और सभी मध्यवर्ती नकल से बचने के लिए है। –

+0

मैंने 'मेमोरीव्यू' कक्षा का उपयोग करके एक उदाहरण शामिल करने के लिए अपना उत्तर संपादित किया है, जो मुझे लगता है कि आप जो चाहते हैं वह करता है। – srgerg

+0

यह मेमोरीव्यू फॉर्म जो मैं चाहता था उसे पूरा करने के लिए प्रतीत होता है। अगर मैंने struct.unpack_into के साथ एक ही काम किया है, और ऑफ़सेट के बजाय मेमोरीव्यू का उपयोग किया है, तो क्या यह वही होगा? यदि ऐसा है, तो कृपया इस पर ध्यान केंद्रित करने के लिए अपने शेष उत्तर को हटा दें। –

संबंधित मुद्दे