Python将字节分成高字节和低字节

2024-04-25 22:59:52 发布

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

我试图用pyserial发送和接收rs232数据,但我不知道如何正确地发送正确的数据。我所掌握的少量信息解释了数据字符串,并说它应该分成高字节和低字节。我不懂如何把它转化为一点都不懂的地方,我试着读了一遍,但不知道怎么用它来做我的案子。在

所以我有这个数据串通过串行发送。 10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,50

它说要将字节分成高字节和低字节,21个字节然后转换成42个字符的数据字符串。在

有人能帮我解释一下怎么做吗?在


Tags: 数据字符串信息字节地方rs232pyserial个字符
1条回答
网友
1楼 · 发布于 2024-04-25 22:59:52

如果你想得到一个字节的高低半字节。换句话说,把8位分成4位。在

考虑到数据字符串是一个十六进制字节串,那么您可以简单地执行以下操作:

high, low = byte[:1], byte[1:2]
print(high, low)

byte = "16"打印1 6。然后可以使用int(high, 16)int(low, 16)将其转换为小数。在

如果已经使用int(byte, 16)将十六进制转换为十进制,则可以通过执行以下操作来提取高位和低位半字节:

^{pr2}$

因为使用byte = 0x16将把0x1 0x6打印出来,因为使用hex(x)将它们转换回十六进制。注意,hex(x)添加了一个0x前缀。您可以通过执行hex(x)[2:]来删除它。

因此,将您的数据字符串考虑为:

bytes = "10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50"

然后打印每一个高低分位可以这样做:

bytes = "10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50"
bytes = bytes.split(",")

for byte in bytes:
    byte = int(byte, 16)
    high, low = byte >> 4, byte & 0x0F

    print(hex(byte), hex(high), hex(low))

它产生字节、高半字节和低半字节都是十六进制的。

另外,如果你有它的位("{0:08b}".format(byte)),那么你可以像这样分割它high, low = bits[:4], bits[4:8],现在{}每个都有4位。在

相关问题 更多 >