解压从串行连接读取的数据
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”是一个好指标,表明该值应该为负数。以上是关于解压从串行连接读取的数据的主要内容,如果未能解决你的问题,请参考以下文章