Python结合GATT库转换十六进制值时遇ValueError问题求助
Python十六进制字节对象转整数报错解决
报错信息
print(int(gatt.before, 16)), ^^^^^^^^^^^^^^^^^^^^ ValueError: invalid literal for int() with base 16: b'0f 18 '
出错代码
print(int(gatt.before, 16)), print("%")
问题说明
变量gatt.before的值为b'0f 18 ',是带空格和末尾空白的十六进制字节对象,而int()函数指定base=16时,要求输入无空格的纯十六进制字符串,直接转换会触发上述报错。
已尝试的无效方法
- 尝试移除空格,但未解决问题
- 使用
.decode('utf-8')将字节对象转为字符串,无效果
解决方案
需要对字节对象做完整的清洗处理,以下两种方法可解决问题:
方法1:转换为单个整数
# 解码为字符串 → 去除首尾空白 → 移除所有空格 → 转整数 clean_hex = gatt.before.decode('utf-8').strip().replace(' ', '') result = int(clean_hex, 16) print(result) # 输出:4088
方法2:拆分转换多个十六进制值
如果0f和18是两个独立的十六进制值,可拆分后分别转换:
# 解码 → 去首尾空白 → 按空格拆分 → 逐个转整数 hex_parts = gatt.before.decode('utf-8').strip().split() values = [int(part, 16) for part in hex_parts] print(values) # 输出:[15, 24]
关键说明
.strip()负责去除字符串首尾的空白字符(包括末尾的空格).replace(' ', '')负责清除字符串中间的空格,确保符合int()的格式要求- 若只做解码或只去空格,都无法满足
int(base=16)的输入规范,必须组合处理
内容的提问来源于stack exchange,提问作者abdul
相关产品推荐
相关产品推荐

