我正在尝试从字节对象中提取数据。例如: 从 b'\x93\x4c\x00' 开始,我的整数从第 8 位隐藏到第 21 位。 我尝试执行 bytes >> 3 但是超过一个字节是不可能的。 我也尝试用 struct 解决这个问题,但是字节对象必须有特定的长度。
如何将位右移?
请您参考如下方法:
不要使用bytes 来表示整数值;如果你需要位,convert to an int :
value = int.from_bytes(your_bytes_value, byteorder='big')
bits_21_to_8 = (value & 0x1fffff) >> 8
0x1fffff 掩码也可以用以下方法计算:
mask = 2 ** 21 - 1
演示:
>>> your_bytes_value = b'\x93\x4c\x00'
>>> value = int.from_bytes(your_bytes_value, byteorder='big')
>>> (value & 0x1fffff) >> 8
4940
然后您可以使用 int.to_bytes() method 返回到字节:
>>> ((value & 0x1fffff) >> 8).to_bytes(2, byteorder='big')
b'\x13L'
