Python中如何将5位十六进制值转换为字符串?
问题原因
- 十六进制长度对齐问题:
bytes.fromhex()要求输入的十六进制字符串长度为偶数,每2个字符对应1个字节。你通过hex()得到的结果去掉前缀后是2f37a,长度为5属于奇数位,处理时会默认高位补0转为02f37a,生成的字节为b'\x02\xf3z',其中存在超出ASCII范围(0-127)的字节,也不符合UTF-8编码规则,因此解码报错。 - 编码匹配问题:你转换得到的字节序列本身不是合法的ASCII/UTF-8编码文本,因此无论如何调整补位,用这两种编码解码都会失败。
解决方案
根据你的实际需求选择对应方案:
方案1:仅需要十六进制字面量字符串
不需要走字节转码流程,直接截取即可,如需偶数位手动补前导0:
int_N = 193402 hex_str = hex(int_N)[2:] # 按需补前导0对齐偶数位 if len(hex_str) % 2 != 0: hex_str = '0' + hex_str
方案2:需要将整数对应的字节序列解码为文本
推荐直接用int.to_bytes()生成字节序列,避免自行处理十六进制字符串的对齐问题:
int_N = 193402 # length指定字节长度,byteorder指定大端/小端序,可根据实际需求调整 byte_data = int_N.to_bytes(length=3, byteorder='big') # 若字节不是标准ASCII/UTF-8编码,可使用Latin-1单字节编码兼容所有0-255的字节值 str_data = byte_data.decode('latin-1')
内容的提问来源于stack exchange,提问作者Mikael
相关产品推荐
相关产品推荐

