bluepy读取BLE特征值如何直接转为整数而非ASCII值
解决方案
你读取到的BLE电池服务特征值是长度为1的bytes类型对象,Python中bytes的每个元素本身就是0-255的十进制整数,最简洁的替换写法为:
print(val[0])
该方案完全等价于你现在的ord(val.decode()),但省去了冗余的解码、转码步骤,是最直接的实现。
其他可选方案
如果要适配BLE特征值解析的通用规范,方便后续扩展其他类型的特征值读取,可以用struct模块按标准类型解析:
电池服务的电量特征属于标准的单字节无符号整数,使用对应格式符B解析即可:
import struct battery_level = struct.unpack('B', val)[0] print(battery_level)
之前的方案问题说明
int(val, 2)报错的原因:该方法仅适用于内容为数字字符串的bytes(比如代表二进制数值的b'101111'),你拿到的b'/'是字节本身的编码值,不是数字的字符串表示,所以无法直接转换。- 之前
struct方案失败的原因:你之前使用了浮点数格式符f解析,和1字节无符号整数的类型不匹配,换用正确的格式符即可正常工作。
内容的提问来源于stack exchange,提问作者TheHolypumpkin
相关产品推荐
相关产品推荐

