【问题标题】:Bitmask operations on slices of Python bytearraysPython 字节数组切片上的位掩码操作
【发布时间】:2016-04-03 00:10:13
【问题描述】:

假设我有一个如下所示的字节数组:
mask = bytearray([0b0001, 0b0100, 0b0111]),
其中每个位代表一个特定的标志。我想像这样在掩码数组的切片中添加一个标志:
mask[0:2] = mask[0:2] | 0b1000
但我得到一个 TypeError :
TypeError: unsupported operand type(s) for |: 'bytearray' and 'int'
这样做最优雅的方式是什么?

也试过这个:
masks[0:2] = bytearray([bin(m | 0b0001) for m in masks[0:2]]) 有错误:
string must be of size 1

谢谢!

【问题讨论】:

    标签: python bytearray bitmask


    【解决方案1】:

    如果不求助于numpy,则无法直接完成,但您可以解决它:

    mask[:2] = (b | 0b1000 for b in mask[:2])
    
    print(list(map(bin, mask)))
    

    得到你:

    ['0b1001', '0b1100', '0b111']
    

    您的最后一次尝试已经接近尾声,但是当您真正想要原始整数值时,包装 bin 正在转换为字符串表示形式。

    【讨论】:

    • 谢谢——我什至没有考虑过 numpy。我可以这样做:masks[0:2] = np.bitwise_or(masks[0:2], 0b0001),然后用map(np.binary_repr, masks)查看我更改的标志
    猜你喜欢
    • 2011-05-30
    • 2021-12-27
    • 1970-01-01
    • 2021-03-09
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多