【发布时间】:2021-09-21 09:14:22
【问题描述】:
我在这里搜索了一堆没有合适的解决方案。标题可能有点奇怪或不完全准确,但让我解释一下: 我的 IoT 设备每秒收集一堆数据,我可以将其表示为整数列表。这是一行传感器读取的示例(零并不总是 0 btw):
230982 0 4294753011 -9 4294198951 -1 4294225518 0 0 0 524789 0 934585 0 4 0 0 0 0
在触发时,我想将整个表(直到那时的所有行)发送到我的计算机。我可以将其字符串化并连接所有内容,但想知道是否有更有效的编码/压缩来减少字节数,无论是在存储在 RAM/闪存中还是为了减少传输量。理想情况下,这可以通过集成功能来实现,即没有外部压缩库。我对编码/压缩不是很擅长,希望你能给我一个提示。
【问题讨论】:
-
你知道数据,所以你必须知道如何压缩它(例如你知道限制)。也许只是将它们作为二进制数发送就足够了(你应该知道以字节为单位的大小)
-
最佳策略取决于数据类型。仅凭少量数据很难确定。一种简单的可能性:对于每个整数,使用 1 或 2 位来指定用于编码整数的位/字节数,例如1字节/4字节/8字节...
-
@TedLyngmo 一般在物联网设备中,计算能力非常有限,功耗必须保持非常低。但这篇文章并没有明确说明这些约束是否有效。
-
@Damien 是的,我仔细阅读并删除了我的评论。
-
@André 这取决于范围。如果将示例中的大无符号值转换为有符号值,则显示的所有数字都适合 21 位,包括符号位,但将它们存储为 24 位更方便。当然,如果您需要存储 -8388608 到 8388607 范围之外的数字,那么 24 位是不够的。
标签: c encoding compression