我不确定这是否可能,但也许有些事情我没有考虑到。我有两个数字,我想将它们组合成一个字节(8 位)。第一个数字可以有 80 个不同的值(0 到 79),第二个数字可以有 8 个不同的值(0 到 7)。我知道我可以通过简单的位移和掩码将它们组合成 9 位,但是有没有办法将它们组合成 8 位,并且以后仍然能够在不知道数据的情况下取消它们的组合?
感谢您对此的任何见解!
不,不可能,因为 8 乘以 80 大于 256。这两个值的可能集合比一个字节的值多。所以不存在一对一的映射。
更基本的问题可能是:是否可以将范围为 not 2 的幂的值组合成一个整数。是的,您可以使用乘法、除法和取模来处理更一般的情况,而不是左移、右移和与。
例如,如果您有一组 15 个值 (x = 0..14) 和一组 17 个值 (y = 0..16),那么您应该能够将它们填充到一个字节中,因为 15 * 17 = 255,小于256。将它们放入一个字节:
b = x * 17 + y
提取它们:
x = b / 17;
y = b % 17;
这也很容易扩展到三个或更多值。
不合适就是不合适