0

私は現在、エラー訂正巡回コードを介してメッセージをエンコードおよびデコードするプログラムを作成しています。私のアルゴリズムは 1 つのメッセージに対しては正常に動作しますが、文字列のデコードで問題が発生しました。エンコードとデコードは次のように機能します。

  1. エンコード アルゴリズムはKビットを受け取り、結果としてNビットを返します。
  2. デコードアルゴリズムはNビットを受け取り、結果としてKビットを返します。

たとえば、文字列をエンコードおよびデコードしたいとします。Kビットが読み取られるまで、文字列をバイト配列に変換し、ビットごとに読み取ります。次に、このKビットをエンコードし、受信したすべてのNビットをバイト配列にビットごとに書き込みます。等々。デコードは同じですが、Nビットをデコードし、バイト配列にKビットをビット単位で書き込みます。私の問題の例があります。

K = 9の場合(問題を視覚化するための各行の長さはKです)

0 ][ 11100000 ]
00 ][ 0011101
010 ] [ 111000
0000 ][ 00111
11010 ][ 1110
111010 ][ 001
0111010 ][ 11
_ _ _ _ _ _ [ 0

最後の行に 1 つのゼロがあり、前の 9 ビットに収まりませんでした。したがって、完全なKビット メッセージのようにエンコードします。もちろん、デコード後、 Kビットのメッセージを受け取り、余分なバイトが表示されます。

[ 00000000 ][ 0

そして、この余分なバイトを決定する方法がわかりません。エンコード前にこのゼロバイトがあった可能性があります。私の問題をどうすればよいかアドバイスをいただけませんか。アルゴリズムを変更する必要があるかもしれません (少しずつ読むべきではないかもしれません)。どんな助けにも感謝します。ありがとう。

4

2 に答える 2

0

可変長のビットシーケンスに基づくエンコーディングアルゴリズムは、「性質」ではかなり一般的です。Rosettaコードでビット単位IOのソリューションを確認してください。いくつかのアイデアが得られる場合があります。

于 2012-05-02T14:19:18.150 に答える
0

このギャップを 0xFF バイトで埋めることにしました。UTF8 エンコーディングを使用しており、0xFF バイトを含めることはできないため、デコード後にメッセージの末尾にある 0xFF バイトをすべて削除します。

于 2012-05-09T12:53:46.537 に答える