Python3中如何提取两字节的11个最高有效位并转十进制?
提取两个字节中11个最高有效位的十进制值
可以通过以下简洁步骤实现需求:
- 读取串口字节:用PySerial的
read(2)方法读取两个字节,得到bytes对象。 - 合并为16位整数:将两个字节按大端(Big-Endian)顺序转换为整数,确保第一个字节作为高位、第二个作为低位。
- 右移保留高11位:两个字节共16位,要保留11个最高有效位,只需将合并后的整数右移5位(16-11=5),自动丢弃低5位,剩下的就是目标十进制值。
示例代码
import serial # 初始化串口(根据你的实际端口、波特率修改) ser = serial.Serial('COM3', 9600, timeout=1) # 读取两个字节 data = ser.read(2) if len(data) == 2: # 按大端顺序合并为整数 combined = int.from_bytes(data, byteorder='big') # 右移5位提取11个最高有效位 result = combined >> 5 print(result) # 示例输入下输出242 else: print("未读取到足够的字节") ser.close()
示例验证
针对输入b'\x1e@':
- 转换为大端整数是
0x1E40(十进制7744) - 右移5位计算:
7744 >> 5 = 242,与预期结果完全匹配。
内容的提问来源于stack exchange,提问作者Omnistic
相关产品推荐
相关产品推荐

