对于 n 个 16 位值,如何在 8-10 个字节的数据中填充任意数量的值?
How to stuff any number of values in 8-10 bytes of data for n number of 16 bit values?
我正在研究可以拥有任意数量的 16 位值的算法(例如,我有 1000 个 16 位值,并且都是传感器数据,因此没有特定的序列或重复)。我想将所有这些数据填充到一个 8 或 10 字节数组中(1000 个 16 位数字的每个值都应该在 10 字节数组中)。这些信息应该使我也可以轻松解码以从 1000 个值中读取每个值。
我想过将值除以 100 来使用 sin 函数,这样每个数据点将始终在 8 位(0-1 sin 值范围)中,但这只涵盖了小范围的数据而不是大量的值。
如果我要求太多,请原谅我。我只是好奇它是否可能。
这个问题的答案很明显,只要有一点信息科学知识。不可能在这么小的内存中存储那么多的信息,而你所说的数据包含的信息太多了。
一些数据,如重复数据或遵循某种结构的数据(如不断上升的值),包含的信息很少。压缩算法的任务是找出结构或重复而不是存储纯数据来存储结构或规则如何重现数据。
在您的情况下,数据来自传感器,除非您愿意丢失大量信息,否则您将无法生成具有您所说的压缩因子的压缩版本大约(1000 × 2 字节变成 10 字节)。如果您的传感器或多或少一直产生相同的值,并且只有一点点抖动,则可以实现良好的压缩(但是为此,您的问题很广泛,无法在此处回答),但它可能永远不会在范围内将 1000 个值减少到 10 个字节。
我正在研究可以拥有任意数量的 16 位值的算法(例如,我有 1000 个 16 位值,并且都是传感器数据,因此没有特定的序列或重复)。我想将所有这些数据填充到一个 8 或 10 字节数组中(1000 个 16 位数字的每个值都应该在 10 字节数组中)。这些信息应该使我也可以轻松解码以从 1000 个值中读取每个值。 我想过将值除以 100 来使用 sin 函数,这样每个数据点将始终在 8 位(0-1 sin 值范围)中,但这只涵盖了小范围的数据而不是大量的值。 如果我要求太多,请原谅我。我只是好奇它是否可能。
这个问题的答案很明显,只要有一点信息科学知识。不可能在这么小的内存中存储那么多的信息,而你所说的数据包含的信息太多了。
一些数据,如重复数据或遵循某种结构的数据(如不断上升的值),包含的信息很少。压缩算法的任务是找出结构或重复而不是存储纯数据来存储结构或规则如何重现数据。
在您的情况下,数据来自传感器,除非您愿意丢失大量信息,否则您将无法生成具有您所说的压缩因子的压缩版本大约(1000 × 2 字节变成 10 字节)。如果您的传感器或多或少一直产生相同的值,并且只有一点点抖动,则可以实现良好的压缩(但是为此,您的问题很广泛,无法在此处回答),但它可能永远不会在范围内将 1000 个值减少到 10 个字节。