为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2021-12-17 10:48:57
我将脚本从 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 回答

?
桃花长相依

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)


查看完整回答
反对 回复 2021-12-17
?
凤凰求蛊

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'


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信