【问题标题】:Python generic buffer datatype accessPython 通用缓冲区数据类型访问
【发布时间】:2013-04-12 04:28:41
【问题描述】:

在 Python 中,是否有任何现有的基于库的方法可以多态地将缓冲区视为任何数据类型的数组——包括位、字节、字、双字等——而不复制缓冲区?我有一个应用程序,我希望能够将流中任意范围的位设置为任何无符号值。

例如,如果以字节为单位的缓冲区为[0x01, 0x02, 0x03, 0x04, 0x05, 0x06 ...],并且我想将绝对小端位27:11 设置为无符号小端值54321,则以字节为单位的缓冲区变为[0x01, 0x8A, 0xA1, 0x06, 0x05, 0x06 ...]。应该抽象出读取-修改-写入字节的低级细节。然后,我可能希望将数据作为 [0x8A01, 0x06A1, 0x0605, ...] 的 WORD (uint16) 视图,并以这种方式更改一些元素。

是否有任何好的公共 Python 库提供此功能?

【问题讨论】:

    标签: python arrays polymorphism byte bits


    【解决方案1】:

    哦,你的意思是可变类型?

    井列表是可变的,为什么不使用它们呢?

    但如果你真的想使用比特,这里有一个例子 http://wiki.python.org/moin/BitArrays

    它使用 BitArrays - 您应该能够从示例中找出所有内容。

    [编辑]: 用于在任何你想要的地方插入位:

    import array
    a=array.array('I')
    a.append(5) #adds 1 element
    
    a.extend([2,3,3,4,5,5,4]) #adds another 7 elements
    
    a[3:6] = [6,6,6] #replaces 3 elements with the 3 6s
    

    这就是你所需要的吗?

    【讨论】:

    • 我提到的读取和设置任意位范围、字节、字等的所有功能怎么样?
    • 如果您检查该库,您将使用 .insert、.extend 方法访问 array.array('I')。这些似乎对解决您的问题很有用,但至于替换数组的各个部分,我不知道 ....yet
    • 我不相信 array.array 模块可以让您访问我指定的原始绝对位范围。您可以使用它在它支持的类型之间进行转换,包括字节/短裤,但是您必须转换为字符串,然后再转换回另一个 array.array 对象,并且看起来平台和 Python 构建之间的类型可能不统一.我将数字 54321 拼接到缓冲区 [0x01, 0x02, 0x03, 0x04, 0x05, 0x06 ...] 的位 27:11 以使其成为 [0x01, 0x8A, 0xA1, 0x06, 0x05, 0x06 ...] 的示例怎么样?有没有基于库的方法来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多