You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:15:08