如何在少于 2 个字节的情况下编码 16 个数字的列表

How to encode list of 16 numbers in less than 2 bytes

我需要在变量中传递 16 个项目的可用性信息及其 id(0-15)。

char item_availablity[16];

我可以用 2 个字节对其进行编码,其中每一位都映射到一个项目 ID,其中 1 表示可用,0 表示不可用 例如 0000100010001000 此号码包含 ID 为 4812 的商品可用的信息

我需要使用不到 2 个字节对这些信息进行编码。

这可能吗?如果是,怎么做?

简单来说:

不,你不能。用不到 16 位来存储关于 16 个独立事物的 1 位信息是根本不可能的。即一般情况下。

有一些限制是例外。例如,我们称这些项目为 i_1, i_2 ... i_16。如果您知道 i_1 可用 当且仅当 i_2 也可用,那么您可以将这两个项目的可用性编码为一位。

一个更复杂的例子是 i_1 可用当且仅当 i_2i_3 可用。然后您可以将这三个项目的可用性存储在两位中。

但是对于一般情况,不,这是完全不可能的。

在这里尝试跳出框框思考 - 如果某些物品比其他物品更稀有,您可以使用可变长度编码,这样,平均,它会花费更少超过 16 位来存储信息。但是,将有可用性组合需要超过 16 位。