0

たくさんの情報をビット単位でブロックして保存し、ファイルに保存したいと思います。

ファイルをそれほど大きくしないために、intの代わりに少数のビットを使用して指定された情報を保存したいと思います。

たとえば、Day、Hour、Minuteをファイルに保存したいとします。

データストレージ用に5ビット(日)+ 5ビット(時間)+ 6ビット(分)=16ビットのメモリのみが必要です。

それをブロックに保存してファイルに入れる効率的な方法が見つかりません。

私の懸念にはいくつかの大きな問題があります:

  1. 毎回保存したいデータ長は一定ではありません。それは入ってくる情報に依存します。そのため、構造を使用して格納することはできません。

  2. ブロックに未使用のビットがあってはなりません。int(4バイト変数)に30ビットを格納すると、保存した次の3ビットが自動的に次のintに入るというトピックを検索しました。でもそんなことはしたくない!!

  3. 右シフト、左シフトを使用して文字に数値を入れ、文字をブロックに入れることができることは知っていますが、非効率的です。

指定されたビットを引き続き入れ、writeを使用してファイルに入れることができるchar配列が必要です。

4

2 に答える 2

1

特定の情報に必要となる可能性のある最大の値を格納するために必要なビット数を使用するだけだと思います。次に、ハフマンはデータを書き込むときにデータをエンコードします(そして、明らかにハフマンはデータを読み取るときにデコードします)。他のほとんどのアプローチは効率が低い可能性が高く、多くはより複雑になる可能性があります。

于 2010-08-02T03:59:48.533 に答える
0

私はそのような図書館を見たことがありません。ですから、自分で書く必要があるのではないかと思います。とにかく、それは難しいことではありません。

そして効率について。特に2つのマシンワード間でビットを直接操作することをサポートするCPUはほとんどないため、この種の操作には常にビットシフトとマスキングが必要です。唯一の違いは、あなたまたはあなたのコンパイラが翻訳を行うことです。

于 2010-08-02T06:36:28.550 に答える