微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在sqlite中基于偏移量存储、映射和查询二进制数据

如何解决在sqlite中基于偏移量存储、映射和查询二进制数据

我有一个通过 MQTT 传入的数据流,它作为多条消息接收,其中包含我想存储在 sqlite 中的偏移量和长度,以便我可以根据需要进行查询。每条消息可以有不同的长度,而不是 if/elif/else 我确信有一种更有效的方法来查找当前消息并具有偏移量的函数。这是我一直在做的一个宠物门项目的逆向工程。

0 16 03 76 02 01 00 01 00 01 00 02 00 25 00 01 00 00
...
91 7 01 e1 6b 48 00 03 78
..
315 6 03 0c 01 0c 02 01

一个值是十进制的偏移量,然后是十进制的字节长度,然后是该内存偏移量的空格分隔的十六进制值。

我知道在偏移量 91 处,它们将始终是 7 个字节的 big endian 芯片 ID,第一个是 91,然后是 98,依此类推 32 条记录,因此下一个偏移量 315 是另一种类型,不是芯片 ID,而是时间偏移量为 6 个字节。

在某些偏移处,例如 33 是​​ ADC 值,而 34/35 是当前本地时间。您可以设置它,但不能直接查询它,因此如果我在偏移量 30 处查询 10 个字节,我会返回:

30 3 97 98 00
36 4 00 00 01 05

但我可以设置如下值:

34 2 02 06

状态消息会返回

33 3 bb 02 06

而且我知道偏移量 34&35 是时间,所以我想使用基于这两个偏移量的值的函数来转换该时间。

目前我是 if/elif/else 并指定偏移量,但必须有一种更有效的方法来转换这个事实,即当前请求中恰好有此内存偏移量来调用我内置的解码函数,更人性化可读文本。

因为我还基于一个偏移量需要从另一个偏移量中查询可能不在当前消息中的值,所以我需要查询sqlite 或保存该偏移量当前状态的运行时变量。我很想将它存储为单个二进制 blob,然后根据需要进行引用和更新,但这也感觉不对。

项目代码https://github.com/plambrechtsen/pethublocal/blob/main/docker/source/pethubpacket.py#L550

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。