在 Python 3 中将 8 位整数编码为文本

我将脚本从 Python 2 更新到 Python 3 并且在下面的行中遇到问题,它解码并显示 BLE 信标的 RSSI 值:

rssi = struct.unpack("b", packet[packetOffset -1])

我找到了一种获得相同结果的替代方法,它采用广播字符串中的最后两个字符并将它们转换为文本。使用 8 位有符号整数编码器。

例如c3变成-61(https://cryptii.com/pipes/integer-encoder)

但是我正在努力寻找一种在 python 3 中做到这一点的方法!

我如何解码字符串?

任何帮助都感激不尽。


UYOU
浏览 178回答 2
2回答

桃花长相依

这是您要找的吗?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)

凤凰求蛊

您还没有确切显示 中的内容packet,但这是一个猜测:import structpacket = b'\x00\xc3\x00\xff'packetOffset = 2rssi = 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'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python