Python BCD拆分半字节和连接2个整数

2024-10-01 13:33:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得这是一个完整的工具张贴这个,它是如此基本,我不敢相信我浪费了过去两天在这个问题上。我已经尝试了所有我能找到的解决办法(说真的,我会向你展示我的互联网历史),但都没有用。问题是:

我正在解析一个来自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}$

再次感谢!!!在


Tags: 数据字符串编码字节定义ascii数字数组
1条回答
网友
1楼 · 发布于 2024-10-01 13:33:35

您将这些值解释为字符。向int()提供字符是行不通的,您必须以字符串的形式提供值,例如:int("0x5E", 16)。实际上,您正在尝试的是int(chr(int("0x5E", 16)),16),这是{},当然不会起作用。在

你期待这些结果吗?在

makevalue('0x01', '0x5E') ->  350 0x15e 0b101011110
makevalue('0xFF', '0x00') ->  65280 0xff00 0b1111111100000000
makevalue('0x01', '0xFF') ->  511 0x1ff 0b111111111
makevalue('0xFF', '0xFF') ->  65535 0xffff 0b1111111111111111

如果是这样,您可以使用:

^{pr2}$

或者说IMO更丑陋更容易出错:

def makeValue(highbyte, lowbyte):
    return int(highbyte+lowbyte[2:], 16) # strips leading "0x" from lowbyte be4 concat

相关问题 更多 >