将Python中的bytes对象转换为十六进制

72 阅读2分钟

背景:使用python接收串口数据或网络数据时,经常收到以下格式的数据,不利于我们分析数据,需要格式化为十六进制

b'\xbbU\xd9\xaf\x13#\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xaf\x13\x00\x05e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x01\x99'

1.转换为十六进制字符串

data = b'\xbbU\xd9\xaf\x13#\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xaf\x13\x00\x05e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x01\x99'
hex_str = data.hex()
print(hex_str)

输出:bb55d9af132300000000000000000000000faf130005650000000000000000000000000000000000008f0199

2.转换为格式化的十六进制字符串

hex_str = data.hex(' ', 1)  # Python 3.8+ 支持

输出:bb 55 d9 af 13 23 00 00 00 00 00 00 00 00 00 00 00 0f af 13 00 05 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8f 01 99

3.转换为十六进制字符串列表

hex_list = [f"{byte:02X}" for byte in data]  # 列表推导式
print(hex_list)

输出:['BB', '55', 'D9', 'AF', '13', '23', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '0F', 'AF', '13', '00', '05', '65', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '8F', '01', '99']