2010-08-02 65 views
0

我想按位存儲大量信息並將其保存到文件中。如何將位存儲到文件輸入/輸出的大型char數組

爲了保持我的文件不那麼大,我想使用少量的位來保存指定的信息而不是int。

例如,我想將日,小時,分鐘存儲到文件中。

我只希望5位(日)+5位(小時)+6位(分)= 16位內存用於數據存儲。

我找不到一個有效的方式將它存儲在一個塊放入一個文件。

有我關心的一些重大問題:

  1. 數據長度我想保存,每次不是恆定的。這取決於傳入的信息。所以我不能用結構來存儲它。

  2. 在我的塊中一定不能有任何未使用的位,我搜索了一些提到如果我在一個int中存儲了30位(4字節變量)的話題,那麼我保存的下一個3位將自動進入下一個整數。但我不希望它發生!

  3. 我知道我可以使用右移,左移把一個數字放到一個char中,並把char放到一個block中,但效率很低。

我想要一個char數組,我可以繼續將指定的位放入,並使用write將其放入文件中。

+0

讓我明白這一點:你「無法找到一種有效的方式將其存儲到一個塊中,以將其放入一個文件」,這些塊是一個確切的16位?對我來說沒有意義...... – 2010-08-02 03:53:33

+0

你提出的建議只適用於數據字段是用數據結構等帶外方法分隔的情況。如果您的傳入數據是自由格式,然後進行位打包存儲,那麼當您讀回數據時,您怎麼知道它是什麼? – 2010-08-02 04:07:42

+0

http://en.wikipedia.org/wiki/Arithmetic_coding – rwong 2010-08-02 05:40:38

回答

1

我想我只是使用必要的位數來存儲您可能需要的任何給定信息的最大值。然後,霍夫曼編碼數據,當你寫它(顯然霍夫曼解碼它,當你讀它)。大多數其他方法可能效率較低,許多方法也可能更復雜。

0

我還沒有見過這樣的圖書館。所以我擔心你必須自己寫一個。無論如何,這並不困難。

關於效率。這種操作總是需要位移和掩碼,因爲很少的CPU支持直接操作位,特別是在兩個機器字之間。唯一的區別是你或你的編譯器進行翻譯。