【问题标题】: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,但不知道该怎么做。

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

【问题讨论】:

    标签: python struct


    【解决方案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”是一个指标,表明该值应该为负数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多