2010-08-02 67 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支持直接操作位,特别是在两个机器字之间。唯一的区别是你或你的编译器进行翻译。