2011-11-25 60 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_fromstruct.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

我已經編輯了我的答案,包括一個使用'memoryview'類的例子,我認爲這是你想要的。 – srgerg

+0

這種記憶視圖形式似乎完成我想要的。如果我用struct.unpack_into做了一個類似的事情,並且使用了一個memoryview而不是offset,它會是一樣的嗎?如果是這種情況,請刪除您的其他答案以關注此問題。 –