我将脚本从 Python 2 更新到 Python 3 并且在下面的行中遇到问题,它解码并显示 BLE 信标的 RSSI 值:rssi = struct.unpack("b", packet[packetOffset -1])我找到了一种获得相同结果的替代方法,它采用广播字符串中的最后两个字符并将它们转换为文本。使用 8 位有符号整数编码器。例如c3变成-61(https://cryptii.com/pipes/integer-encoder)但是我正在努力寻找一种在 python 3 中做到这一点的方法!我如何解码字符串?任何帮助都感激不尽。
2 回答
![?](http://img1.sycdn.imooc.com/545868330001e54e02200220-100-100.jpg)
桃花长相依
TA贡献1860条经验 获得超8个赞
这是您要找的吗?
a = bytes.fromhex('c3') res = a[0] - 256 if a[0] > 127 else a[0]
bytes.fromhex
接受一个字符串并将其转换为一个byte
对象。您获取第一个字节并通过检查它是否大于 127 使其无符号。
或者:
res = int.from_bytes(bytes.fromhex('c3'), byteorder='big', signed=True)
![?](http://img1.sycdn.imooc.com/533e4c0500010c7602000200-100-100.jpg)
凤凰求蛊
TA贡献1825条经验 获得超4个赞
您还没有确切显示 中的内容packet,但这是一个猜测:
import struct
packet = b'\x00\xc3\x00\xff'
packetOffset = 2
rssi = struct.unpack("b", packet[packetOffset-1: packetOffset])[0]
print(repr(rssi)) # -> -61
# For a text string result, just do:
rssi = str(rssi)
print(repr(rssi)) # -> '-61'
添加回答
举报
0/150
提交
取消