如何在少于 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 为 4
、8
、12
的商品可用的信息
我需要使用不到 2 个字节对这些信息进行编码。
这可能吗?如果是,怎么做?
简单来说:
不,你不能。用不到 16 位来存储关于 16 个独立事物的 1 位信息是根本不可能的。即一般情况下。
有一些限制是例外。例如,我们称这些项目为 i_1, i_2 ... i_16
。如果您知道 i_1
可用 当且仅当 i_2
也可用,那么您可以将这两个项目的可用性编码为一位。
一个更复杂的例子是 i_1
可用当且仅当 i_2
或 i_3
可用。然后您可以将这三个项目的可用性存储在两位中。
但是对于一般情况,不,这是完全不可能的。
在这里尝试跳出框框思考 - 如果某些物品比其他物品更稀有,您可以使用可变长度编码,这样,平均,它会花费更少超过 16 位来存储信息。但是,将有可用性组合需要超过 16 位。
我需要在变量中传递 16 个项目的可用性信息及其 id(0-15)。
char item_availablity[16];
我可以用 2 个字节对其进行编码,其中每一位都映射到一个项目 ID,其中 1
表示可用,0
表示不可用
例如 0000100010001000
此号码包含 ID 为 4
、8
、12
的商品可用的信息
我需要使用不到 2 个字节对这些信息进行编码。
这可能吗?如果是,怎么做?
简单来说:
不,你不能。用不到 16 位来存储关于 16 个独立事物的 1 位信息是根本不可能的。即一般情况下。
有一些限制是例外。例如,我们称这些项目为 i_1, i_2 ... i_16
。如果您知道 i_1
可用 当且仅当 i_2
也可用,那么您可以将这两个项目的可用性编码为一位。
一个更复杂的例子是 i_1
可用当且仅当 i_2
或 i_3
可用。然后您可以将这三个项目的可用性存储在两位中。
但是对于一般情况,不,这是完全不可能的。
在这里尝试跳出框框思考 - 如果某些物品比其他物品更稀有,您可以使用可变长度编码,这样,平均,它会花费更少超过 16 位来存储信息。但是,将有可用性组合需要超过 16 位。