【问题标题】:Read into a bytearray at an offset?以偏移量读入字节数组?
【发布时间】:2012-01-06 00:38:13
【问题描述】:

如何使用readinto() 方法调用bytearray 内的偏移量,就像struct.unpack_from 的工作方式一样?

【问题讨论】:

    标签: python io python-3.x buffer


    【解决方案1】:

    您可以使用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')
    

    您还可以将memoryview 对象与struct.unpack_fromstruct.pack_into 一起使用。例如:

    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')
    

    【讨论】:

    • 我的意图是直接读取字节数组的偏移量,避免所有中间复制。
    • 我已经编辑了我的答案以包含一个使用 memoryview 类的示例,我认为它可以满足您的需求。
    • 这个memoryview表单似乎完成了我想要的。如果我对 struct.unpack_into 做了类似的事情,并使用 memoryview 而不是偏移量,它会一样吗?如果是这种情况,请删除其余答案以专注于此。
    • 谢谢,我正在检查是否需要将其添加为答案
    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多