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
相关产品推荐
相关产品推荐

