我正在使用 Python 和 GATT 库 pxexpect 来处理一些数据,但在尝试将十六进制值转换为整数时遇到问题。这是我看到的具体错误:
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 '。看来这是一个字节对象,表示带空格的十六进制值。然而,基数为 16 的 int() 需要一个不带空格的字符串
我尝试过的:
- 删除空格: 我尝试去掉空格,但这并没有解决问题。
- 解码: 我使用 .decode('utf-8') 将字节对象转换为字符串,但这也没有帮助。
你几乎要找到解决方案了!问题在于空格和
b
前缀,表明它是字节字面量。你需要执行以下操作:
-
删除空格:
你可以用
replace()
方法来做到这一点。 -
将字节解码为字符串:
你可以使用
.decode('utf-8')
来做到这一点,就像你尝试过的那样。 -
将字符串转换为整数:
你可以使用
int(your_string, 16)
来做到这一点,其中your_string
是解码后的字符串。
代码:
hex_string = gatt.before.decode('utf-8').replace(" ", "") # 删除空格并解码
int_value = int(hex_string, 16) # 将十六进制字符串转换为整数
print(int_value)
print("%")
解释:
-
gatt.before.decode('utf-8').replace(" ", "")
: -
gatt.before.decode('utf-8')
将字节对象gatt.before
解码为字符串。 -
.replace(" ", "")
删除字符串中的空格。 -
int(hex_string, 16)
: -
将经过清理的十六进制字符串 (
hex_string
) 转换为整数,基数为 16。
这段代码将首先清理十六进制值,删除空格和
b
前缀,然后将其转换为整数。
如果你仍然遇到问题,请提供 gatt.before 变量的完整输出以及用于获取数据的库或设备的更多上下文信息。
标签:python,python-3.x,gatt,bluetooth-gatt,gatttool From: 78800256