如何将位存储到巨大的char数组以进行文件输入/输出

时间:2010-08-02 03:51:47

标签: c++ arrays bit shift

我希望逐位存储大量信息,并将其保存到文件中。

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

例如,我想将日,小时,分钟存储到文件中。

我只需要5位(天)+5位(小时)+ 6位(分钟)= 16位内存用于数据存储。

我找不到一种有效的方法将它存储在一个块中以放入文件。

我的担忧有一些大问题:

  1. 我每次要存储的数据长度不是常数。这取决于传入的信息。所以我不能使用结构来存储它。

  2. 我的块中一定不能有任何未使用的位,我搜索了一些主题,提到如果我在一个int(4字节变量)中存储30位,那么我保存的下一个3位将自动进入下一个int。但我不希望它发生!!

  3. 我知道我可以使用shift右移,向左移动以将数字放入char中,并将char放入块中,但效率很低。

  4. 我想要一个char数组,我可以继续将指定的位放入,并使用write将其放入文件中。

2 个答案:

答案 0 :(得分:1)

我想我只需要使用所需的位数来存储您可能需要的任何给定信息的最大值。然后,Huffman在您编写数据时对数据进行编码(显然,Huffman会在您阅读时对其进行解码)。大多数其他方法可能效率较低,而且许多方法也可能更复杂。

答案 1 :(得分:0)

我还没见过这样的图书馆。所以我担心你必须自己写一个。无论如何,这并不困难。

关于效率。这种操作总是需要位移和屏蔽,因为很少有CPU支持直接操作位,特别是在两个机器字之间。唯一的区别是您或您的编译器进行翻译。