Python 2.7下十六进制ASCII字符串解码技术求助
解决Python 2.7下十六进制ASCII字符串解码问题
你的问题出在直接对输入的十六进制字符串调用decode('ASCII')——输入的是空格分隔的十六进制字符表示,不是已经编码的字节串,而且F1、88这类值超出了ASCII(0x00-0x7F)的范围,直接解码肯定报错。
正确的处理步骤应该是:
- 把空格分隔的十六进制片段转换成对应的字节
- 用支持扩展ASCII的编码(比如
latin-1)解码 - 剔除不需要的前缀和末尾空字符
以下是Python 2.7的可行代码:
# 输入的十六进制字符串 BResponse = 'F1 88 52 45 4D 41 2D 33 43 37 38 32 2D 42 42 00 00 00 00 00 00 00 00 00' # 1. 拆分十六进制片段,转成对应的字符拼接成字节串 hex_parts = BResponse.split() byte_str = ''.join(chr(int(part, 16)) for part in hex_parts) # 2. 解码(用latin-1兼容扩展ASCII),然后去掉开头2个无效字符和末尾的空字符 result = byte_str.decode('latin-1')[2:].rstrip('\x00') print(result) # 输出: REMA-3C782-BB
代码说明:
split()把输入按空格拆成单个十六进制字符串列表chr(int(part,16))把每个十六进制值转成对应的ASCII/Latin-1字符decode('latin-1'):因为F1、88属于0x80-0xFF的扩展ASCII范围,ASCII编码不支持,latin-1可以完美映射这些值[2:]跳过开头两个无效字符(对应输入的F1和88)rstrip('\x00')去掉末尾所有的空字符(00对应的\x00)
内容的提问来源于stack exchange,提问作者Joseph Stalin Pillai
相关产品推荐
相关产品推荐

