将10位值合并为唯一字节

Dav*_*ore 2 algorithm binary logic byte

作为我正在编写的算法的一部分,我需要找到一种方法将10位字转换为唯一的8位字.10位字由5对组成,其中每对只能等于0,1或2(从不3).例如:

|00|10|00|01|10|
Run Code Online (Sandbox Code Playgroud)

该值需要以某种方式合并为一个唯一的字节.

由于每对不能等于3,因此这个10位字永远不会代表各种各样的值,这使我认为可以创建一个算法来执行这种转换.最简单的方法是使用查找表,但是存储约680个值似乎浪费资源,这些值只能在我的程序中使用一次.我已经尝试过以某种方式将其中一对结合到其他对中,但是我所做的每一次尝试都产生了一种非独特的价值,而且我现在很快就没有想法!

有帮助吗?

Duk*_*ing 5

您拥有的数字基本上是基数3.您只需要将其转换为基数2.

有5对,所以3 ^ 5 = 243个数字.8位是2 ^ 8 = 256个数字,所以它是可能的.

在基数之间进行转换的最简单方法是首先转到10.

所以,举个例子:

00|10|00|01|10

Base 3: 02012

Base 10: 2*3^3 + 1*3^1 + 2*3^0
       = 54 + 3 + 2
       = 59

Base 2:
    59 % 2 = 1
/2  29 % 2 = 1
/2  14 % 2 = 0
/2   7 % 2 = 1
/2   3 % 2 = 1
/2   1 % 2 = 1

   So 111011 is your number in binary
Run Code Online (Sandbox Code Playgroud)

更详细地解释了上述过程.

请注意,一旦您将59上面的内容存储为1字节整数,您可能已经拥有了所需的内容,因此可能不需要显式转换为base 2.