将10位值合并为唯一字节

时间:2013-09-05 10:25:16

标签: algorithm binary logic byte

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

|00|10|00|01|10|

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

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

任何帮助?

3 个答案:

答案 0 :(得分: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

This更详细地解释了上述过程。

请注意,一旦你将59存储在一个1字节的整数中,你可能已经拥有了你想要的东西,因此可能没有必要明确转换为base 2.

答案 1 :(得分:1)

你基本上拥有的是一个基数为3的数字,并且你想将它转换为单个数字0 - 255,幸运的是,三元(基数3)中的5位数提供了243种组合。

您需要做的是:

Digit      Action
(  1st     x 3^4)
+ (2nd     x 3^3)
+ (3rd     x 3^2)
+ (4th     x 3)
+ (5th)

这会给你一个0到242的数字。

答案 2 :(得分:0)

您正在考虑将某些信息存储在一个字节中。一个字节最多可包含2 ^ 8 = 256状态。

您的状态总共为3 ^ 5 = 243< 256.这使转移成为可能。

考虑你的对是ABCDE(每个字符可以是0,1或2)

您可以计算A * 3 ^ 4 + B * 3 ^ 3 + C * 3 ^ 2 + D * 3 + E作为结果。我保证结果将在0 - 255范围内。