Python:将电表SML协议字节数组转换为纯十六进制字节数组
将字节数组转换为空格分隔的纯十六进制字符串
Python 实现方法
假设你已经通过串口读取到了字节类型的原始数据(比如示例中的b"\x1b\x1b\x1b\x1b..."),可以用以下代码快速转换:
# 假设这是从串口读取到的原始字节数据 raw_data = b"\x1b\x1b\x1b\x1b\x01\x01\x01\x01v\x07\x00\x17\x06\xf7\x84\x08b\x00b\x00rc\x01\x01v\x01\x01\x07\x00\x17\x11\x9d\x81x\x0b\t\x01emh\x00\x00c_\xdd\x01\x01cl\x18\x00v\x07\x00\x17\x06\xf7" # 转成连续十六进制字符串 hex_str = raw_data.hex() # 按每两个字符分割并添加空格 formatted_hex = ' '.join(hex_str[i:i+2] for i in range(0, len(hex_str), 2)) print(formatted_hex)
运行后会输出符合要求的格式:1b 1b 1b 1b 01 01 01 01 76 07 00 17 06 f7 84 08 62 00 62 00 72 63 01 01 76 01 01 07 00 17 11 9d 81 78 0b 09 01 65 6d 68 00 00 63 5f dd 01 01 63 6c 18 00 76 07 00 17 06 f7
Shell 命令行实现方法
如果不需要编写代码,直接用系统工具处理串口数据,可以用xxd组合命令:
cat /dev/ttyUSB0 | xxd -p | tr -d '\n' | sed 's/../& /g' | sed 's/ $//'
xxd -p:将输入的二进制数据转为连续的十六进制字符串tr -d '\n':去除所有换行符,保证字符串连续sed 's/../& /g':每两个字符后插入一个空格sed 's/ $//':移除末尾多余的空格
内容的提问来源于stack exchange,提问作者FernSeher
相关产品推荐
相关产品推荐

