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

Python十六进制值转码异常:RFID模块字节流命令显示问题

问题描述

我尝试使用Python向RFID模块发送字节流命令。设备要求的示例命令为:

b'\xa0\x06\x01\x72'

但保存并打印到控制台时,显示为:

b'\xa0\x06\x01r'

我尝试了多种函数,结果均一致:

>>> bytearray(b'x72')
'r'

>>> bytes.fromhex('72')
'r'

>>> array.array('B', [114]).tobytes()
'r'

所有0x01-0x7F范围内的十六进制码在执行代码时都会显示为ASCII字符。请问能否强制Python显示并发送实际的十六进制值?

解决方案

发送字节流无需担心

你完全不用纠结控制台的显示——Python打印时的r和十六进制0x72是同一个字节(ASCII码114对应的字符就是r)。实际发送给RFID模块的字节值始终是正确的0x72,不会影响设备接收,这只是Python控制台为了可读性,把可打印ASCII字符直接显示出来而已。

强制显示十六进制格式

如果只是想让输出以十六进制形式展示,而非ASCII字符,可以自己实现格式化逻辑:

方法1:自定义格式化函数

def print_hex_bytes(byte_data):
    hex_parts = [f'0x{b:02x}' for b in byte_data]
    print(f"b'{' '.join(hex_parts)}'")

# 测试示例
cmd = b'\xa0\x06\x01\x72'
print_hex_bytes(cmd)
# 输出:b'0xa0 0x06 0x01 0x72'

方法2:用列表推导式逐个转换

cmd = b'\xa0\x06\x01\x72'
print([hex(b) for b in cmd])
# 输出:['0xa0', '0x06', '0x01', '0x72']

另外提一句,你之前写的bytearray(b'x72')是错误写法,正确的应该是bytearray.fromhex('72'),不过这个不影响最终发送的字节值,只是语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:33:15