Python将Hex字符串转换为Byte并逐行打印字节数值报错求助
问题解决方法
错误原因
'ascii' codec can't decode byte 0x80 in position 2: ordinal not in range(128)
出现该报错的核心原因是你不需要将字节串解码为ASCII字符串:你的字节数据中存在大量数值超过127的字节,本身就不符合ASCII编码规则,且你的需求是打印每个字节的数值,直接遍历字节串即可,无需做解码操作。
注意事项
你提供的Hex字符串Str0长度为257位,属于非法的Hex格式(每2个Hex字符对应1个字节,总长度必须为偶数),请先确认是否输入时多写了末尾的0,如果是多余字符可先做切片处理。
正确实现代码
Str0 = '04008020546c359986812644420e453113e209afeaaeeb316f3a07000000000000000000b8fa13b3fca087c1456daac626ab9b8a47eae821a326f17e0ffffc15433df709b0f718610b1812175a5c9544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280' # 先处理Hex字符串为偶数长度(根据你的实际数据调整,此处假设末尾0为多余字符) Str0 = Str0[:-1] # 转换为字节串,该步骤你原本的写法是正确的 bytes_obj = bytes.fromhex(Str0) # 逐行打印每个字节的信息,可根据需要调整输出格式 for idx, val in enumerate(bytes_obj): # 同时打印索引、十进制数值、十六进制数值 print(f"第{idx}个字节:十进制={val} 十六进制=0x{val:02X}")
输出示例(前几行)
- 第0个字节:十进制=4 十六进制=0x04
- 第1个字节:十进制=0 十六进制=0x00
- 第2个字节:十进制=128 十六进制=0x80
- 第3个字节:十进制=32 十六进制=0x20
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

