Python串口场景下:如何将十六进制c1与32拼接转十进制49458?
问题:十六进制值拼接转换为十进制
需要将串口读取到的两个十六进制值(如c1和32)拼接后转换为十进制值49458,现有Python串口通信代码如下:
import serial # 原代码缺少该导入,需补充 ComPort = serial.Serial("COM3", baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1,) Temphex = b'\x01\x03\x00\x00\x00\x02\xC4\x0B' ComPort.write(Temphex) temp = ComPort.read(7) t=" ".join(["{:02x}".format(x) for x in temp]) print(t) # parse t1=(t[12:14]) t2=(t[18:20]) print(t1,t2) ComPort.close()
代码运行后输出:
01 03 04 0a c1 14 32 c1 32
解决方案
核心思路
实现目标转换无需先转字符串处理,直接操作串口读取的字节数据更高效可靠;若坚持用字符串也可实现,但字节操作更简洁。
方案1:直接操作字节(推荐)
串口读取的temp是字节对象,目标字节对应索引为4(0xc1)和6(0x32),将高位字节左移8位后与低位字节做按位或运算,即可得到拼接后的十进制值:
import serial ComPort = serial.Serial("COM3", baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1,) Temphex = b'\x01\x03\x00\x00\x00\x02\xC4\x0B' ComPort.write(Temphex) temp = ComPort.read(7) if len(temp) == 7: # 确保读取完整数据 decimal_value = temp[4] << 8 | temp[6] print(f"转换结果:{decimal_value}") # 输出:49458 else: print("未读取到完整数据") ComPort.close()
方案2:基于字符串处理
如果保留原字符串解析逻辑,可将两个十六进制字符串拼接后转十进制:
# 在原代码的parse部分替换为以下内容 hex_combined = t1 + t2 decimal_value = int(hex_combined, 16) print(f"转换结果:{decimal_value}") # 输出:49458
内容的提问来源于stack exchange,提问作者KurtA
相关产品推荐
相关产品推荐

