2011-11-25 5 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を読み取ると仮定すると:またstruct.unpack_fromstruct.pack_intomemoryviewオブジェクトを使用することができ

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

。たとえば:

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を使用した場合、それは同じでしょうか?このような場合は、残りの回答を削除してこれに焦点を当ててください。 –

関連する問題