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

如何阻止bytes.fromhex将十六进制值转换为ASCII字符表示?

问题解决思路

首先明确核心误区:bytes.fromhex('43')生成的字节本身是正确的0x43,Python显示为b'C'只是因为0x43对应ASCII可打印字符'C',这是Python的优化显示方式,实际字节数据和b'\x43'完全等价。你可以通过以下代码验证:

b1 = bytes.fromhex('43')
b2 = b'\x43'
print(b1 == b2)  # 输出True
print(list(b1))  # 输出[67],即0x43的十进制值

接下来针对你的场景给出具体解决步骤:

  • 直接使用原始字节字面量构造指令
    如果你担心fromhex的显示造成混淆,直接用最初的bytes字面量即可,它和fromhex生成的指令完全一致:

    cmd = b'\x01\x10\x00\x08\x00\x02\x04\x00\x00\x16\x43\xe7\xf5'
    
  • 排查pumpSendData函数的处理逻辑
    问题的根源可能不在字节构造,而在pumpSendData对字节的处理上:

    • 如果函数要求接收原始字节流,那当前构造的cmd是正确的,直接传入即可,无需额外处理;
    • 如果函数错误地将bytes对象解码为字符串(比如调用了cmd.decode('ascii')),会导致字节被转换为字符发送,此时需要修改函数,确保它直接发送原始字节数据,不做解码操作。
  • 验证实际串口发送数据
    用串口调试工具监听发送端口,查看实际发出的字节值。如果工具显示对应位置是0x43,说明字节构造和发送都没问题,只是Python的显示方式让你产生了误解;如果显示的是字符'C'的ASCII值以外的内容,再针对性排查pumpSendData的转换逻辑。

内容的提问来源于stack exchange,提问作者WhiteSpaceTrent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:06