我觉得这是一个完整的工具张贴这个,它是如此基本,我不敢相信我浪费了过去两天在这个问题上。我已经尝试了所有我能找到的解决办法(说真的,我会向你展示我的互联网历史),但都没有用。问题是:
我正在解析一个来自uC的串行字符串。它有52个字节长,包含许多不同的数据变量。以压缩二进制编码十进制编码的数据。在
例如:.....blah.....0x01 0x5E .....blah
015E十六进制给出350个十进制数。这是我想要的值。我在读串行字符串很好,我用过比纳西伊.赫希菲打印字节以确保其正确。我使用
data = ser.read()
如果没有收到换行符,则将数据放入数组中。我试着把这个数组列为一个bytearray,list,任何我能找到的东西,但都没用。在
我想将所需的两字节部分发送到一个已定义的方法。在
def makeValue(highbyte, lowbyte)
当我处理这个问题时,我会继续使用它。在
因为0x01和0x5E不是有效的整型数(以ASCII表示的标题开头和^),所以它不起作用。它甚至不允许我先加入数字,因为它不是一个有效的整数
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定义:
^{pr2}$再次感谢!!!在
您将这些值解释为字符。向},当然不会起作用。在
int()
提供字符是行不通的,您必须以字符串的形式提供值,例如:int("0x5E", 16)
。实际上,您正在尝试的是int(chr(int("0x5E", 16)),16)
,这是{你期待这些结果吗?在
如果是这样,您可以使用:
^{pr2}$或者说IMO更丑陋更容易出错:
相关问题 更多 >
编程相关推荐