Skip to main content
 首页 » 编程设计

python之如何在 python 中移动 2-5 字节长的字节对象中的位

2025年05月04日13lexus

我正在尝试从字节对象中提取数据。例如: 从 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'