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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:35