我觉得这是一个完整的发布工具,它是如此基础,我不敢相信我在这个问题上浪费了过去两天。我已经尝试了所有我能找到的解决方案(说真的,我会告诉你我的互联网历史)但无济于事。这是问题所在:
我正在从 uC 中解析一个串行字符串。它长 52 个字节,包含许多不同的数据变量。以打包二进制编码的十进制编码的数据。
前任:.....blah.....0x01 0x5E .....blah
015E hex 给出 350 十进制。这就是我想要的价值。我正在读取串行字符串就好了,我使用 binascii.hexifiy 打印字节以确保它是正确的。我用
data = ser.read()
如果没有收到换行符,则将数据放入数组中。我尝试将数组设置为字节数组、列表,以及我能找到的任何东西,但没有任何效果。
我想将所需的两个字节部分发送到定义的方法。
def makeValue(highbyte, lowbyte)
当我尝试使用解包、连接、打包、位操作、字符串集中时,我一直遇到同样的问题。
因为 0x01 和 0x5E 不是有效的 int 数字(ASCII 中的标题和 ^ 的开头),所以它不起作用。它甚至不会让我先加入数字,因为它不是有效的 int。
using hex(): hex argument can't be converted to hex.
Joining the strings: invalid literal for int() with base 16: '\x01^'
using int: invalid literal for int() with base 10: '\x01^'
Packing a struct: struct.error: cannot convert argument to integer
说真的,我在这里错过了一些非常基本的东西吗?我能找到的所有示例都完美地利用了上述所有功能,但它们指定了十六进制数字“0x1234”,或者它们正在转换的数字是实际的 ASCII 数字。请帮忙。
编辑 我明白了,ch3ka 让我走上了正轨,谢谢一百万!
我不知道为什么它以前不起作用,但我对这两个值都进行了十六进制处理
one = binascii.hexlify(line[7])
two = binascii.hexlify(line[8])
makeValue(one, two)`
然后使用 char makeValues ch3ka 定义:
def makeValue(highbyte, lowbyte)
print int(highbyte, 16)*256 + int(lowbyte, 16)
再次感谢!!!