解压从串行连接读取的数据

Posted

技术标签:

【中文标题】解压从串行连接读取的数据【英文标题】:Unpack data read from serial connection 【发布时间】:2013-11-07 10:35:45 【问题描述】:

我从串行连接中逐行读取数据,并按以下格式获取:

b'002151BF,FFFF9F86'
b'002151C0,FFFF9F89'
b'002151C1,FFFF9F89'
b'002151C2,FFFF9F86'
b'002151C3,FFFF9F84'
b'002151C4,FFFF9F83'
b'002151C5,FFFF9F81'
b'002151C6,FFFF9F7E'
b'002151C7,FFFF9F79'
b'002151C8,FFFF9F76'
b'002151C9,FFFF9F70'
b'002151CA,FFFF9F69'
b'002151CB,FFFF9F67'
b'002151CC,FFFF9F66'
b'002151CD,FFFF9F66'
b'002151CE,FFFF9F68'

如您所见,它是两个 8 字节的十六进制数字除以逗号。

如何将其解压缩为十进制数字?我查看了 struct.unpack,但不知道该怎么做。

我们将非常感谢您的帮助 - 提前致谢。

【问题讨论】:

【参考方案1】:
3>> [int(x, 16) for x in b'002151BF,FFFF9F86'.split(b',')]
[2183615, 4294942598]

3>> [(int(x, 16) + 0x80000000) % 0x100000000 - 0x80000000 for x in b'002151BF,FFFF9F86'.split(b',')]
[2183615, -24698]

【讨论】:

Ignacio - 感谢您的贡献 - 它看起来很有希望。你能解释一下第二个版本发生了什么(结果看起来像预期的那样)吗? 它只是通过偏移、模数和删除偏移来滚动值。 请原谅我的无知,但是您怎么能看到该值应该“翻转”? @user2739064:十六进制数开头的许多“F”是一个指标,表明该值应该为负数。

以上是关于解压从串行连接读取的数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Tkinter 文本框中显示从串行端口读取的数据时,发出处理数据

通过串行Arduino和XBee读取数据

如何将名称动态分配给 RFID 阅读器连接的串行端口

重启后Pyserial的串行连接问题

通过串行连接从智能卡读卡器接收数据(C#)

从 Pyserial 读取串行输出不能可靠地工作