2017-10-20 22 views
-1

私はCを使用しており、6種類のコマンド番号を0〜5とし、3つを組み合わせて1つのバイトとして保存します。だから問題はどうやってこれらの数字をエンコードすることができるのだろうか?たとえば、バイナリエンコーディングを使用して5が101である場合、101101101が9ビットで1バイトが8であるため、555を保存できません。 ご協力いただきありがとうございます。3つの数値データを1バイトで圧縮する

+1

これはできません。可能なコンボの数(343)は256を超えます。 –

+0

6つのシンボルを表すには少なくとも3ビットが必要です。したがって、1つのバイトに3つの異なるシンボルを表すことはできません。 – user0042

+0

0-5、6記号のシンボル – zpwpal

答えて

8

3桁のベース6の数として3つの数字を扱い、その値を計算する:

value = num1 * 36 + num2 * 6 + num3 

num1 = value/36 
num2 = (value/6) % 6 
num3 = value % 6 

それはバイトに収まるように、値は、215の範囲0であろう。

+0

完璧な答え、ありがとう – zpwpal

+0

接線のコメント。これをたくさん行う必要がある場合(おそらくカラーテーブルの場合)、/と%が遅いことが分かります:デコードにLUTを使うことができます。またはいくつかの注意を払って、おそらく乗算とシフトを使って除算を近似することができます(これらの216個の値に対して十分に正確である必要があります)。 – NickJH

関連する問題