2

私が書いているアルゴリズムの一部として、10 ビット ワードを一意の 8 ビット ワードに変換する方法を見つける必要があります。10 ビット ワードは 5 つのペアで構成され、各ペアは 0、1、または 2 にしか等しくなりません (決して 3 にはなりません)。例えば:

|00|10|00|01|10|

この値は、何らかの形で単一の一意のバイトに統合する必要があります。

各ペアが 3 になることはあり得ないため、この 10 ビット ワードが表すことのできない値の範囲が広いため、この変換を実行するアルゴリズムを作成することは可能だと思います。これを行う最も簡単な方法は、ルックアップ テーブルを使用することですが、私のプログラムで一度しか使用されない ~680 の値を格納するのはリソースの無駄のようです。私はすでにペアの 1 つを他のペアに組み込むことを試みましたが、私が行ったすべての試みは非固有の値をもたらしました。

何か助けはありますか?

4

3 に答える 3

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

これは、上記のプロセスをもう少し詳しく説明しています。

上記を591 バイトの整数に格納すると、おそらくすでに必要なものが得られているため、基数 2 に明示的に変換する必要はないことに注意してください。

于 2013-09-05T10:41:39.117 に答える
1

基本的に持っているのは基数 3 の数値で、これを単一の数値 0 ~ 255 に変換したい場合、幸運にも 3 進数 (基数 3) の 5 桁で 243 の組み合わせが得られます。

あなたがする必要があるのは次のとおりです。

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

これにより、0 から 242 までの数値が得られます。

于 2013-09-05T10:44:14.897 に答える
0

一部の情報をバイトに格納することを検討しています。1 バイトには最大で 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 の範囲になることを保証します。

于 2013-09-05T15:40:57.023 に答える