【问题标题】:convert/repack 16 bytes/bytearray with 1 significant bit into byte with all significant bits in python3将具有 1 个有效位的 16 个字节/字节数组转换/重新打包为具有 python3 中所有有效位的字节
【发布时间】:2018-12-23 12:13:49
【问题描述】:

如何在 python3 中将 8 个字节或具有 1 个有效位的字节数组重新打包成具有十六进制值的字节,例如:

  bytearray = [b'\x01', b'\x01', b'\x01', b'\x01',
               b'\x01', b'\x01', b'\x01', b'\x01']

转换为:

byte = b'\ff\

【问题讨论】:

    标签: arrays python-3.x byte bit pack


    【解决方案1】:

    你可以这样做:

    bits = [b'\x01', b'\x00', b'\x01', b'\x01',
            b'\x01', b'\x01', b'\x01', b'\x00']  # 1011 1110 -> 0xbe
    
    int_val = sum(bit[0] << 7-i for i, bit in enumerate(bits))
    byte = bytes([int_val])
    print(byte)
    # b'\xbe'
    

    由于bytes 对象的行为类似于整数序列,我们得到:

    b'\x01`[0]
    # 1
    

    我们将位值向左移动:对于列表中的第一个,i 将为 0,因此它被移动了 7 个位置,依此类推。然后我们将这些值相加得到你的字节的数值。

    bytes() 接受整数序列,因此我们将我们的字节值作为唯一项传递给它一个列表。

    【讨论】:

      猜你喜欢
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多