0

私のアルゴリズムは、9 ビットと 17 ビットのストリームを生成します。このデータをファイルに保存するためのソリューションを見つける必要があります。しかし、9 ビットを int として格納し、17 ビットを int_32 として格納することはできません。

たとえば、私のアルゴリズムが 10x9 ビットと 5x17 ビットを生成する場合、出力ファイルのサイズは 22 バイトである必要があります。

また、解決すべき大きな問題の 1 つは、出力ファイルが非常に大きくなる可能性があり、ファイルのサイズが不明であることです。

私が今持っている唯一のアイデアは、 bool *vector; を使用することです。

4

2 に答える 2

0

あなたの例を文字通り取ると、175ビットを保存したい場合、それが2つの異なる長さの不明な数のエンティティで構成されている場合、ファイルは絶対に22バイトにすることはできません. ファイル内で先に何があるかを知る必要があります。長さが必要です。可能なサイズが 2 つしかない場合、それは 1 ビットだけです。0 は 9 ビット、1 は 17 ビットを意味します。

|0|9bit|0|9bit|1|17bit|0|9bit|1|17bit|1|17bit|...

したがって、あなたの例では、10*(1+9)+5*(1+17) = 190 ビット ~ 24 バイトが必要です。未処理の 2 ビットは、バイト境界に揃えるために 0 でパディングする必要があります。別のエンティティがあるかのようにファイルを読み続けるという事実 (ファイルの長さがわからないと言ったため) は、最後のそのようなパディングが常に 9 ビット未満になるため、問題にはなりません。ファイルの終わりに到達したら、最後の不完全な読み取りを破棄できます。

実際、このアプローチでは、バイト レベル ストリームのビット レベル操作を実装する必要があります。これは、注意深いマスキングと論理演算を意味します。BASE64 はまさにそれであり、テキストファイルに格納された固定 6 ビット エンティティのみで構成され、あなたよりも単純です。

于 2012-11-08T09:35:10.983 に答える
0

動的ビットを保存する必要がある場合、おそらく 2 つの値を保存する必要あります。2 番目は、ビットを表す 32 ビット整数です。

于 2012-11-08T06:53:25.810 に答える