在c ++中将二进制日期保存到文件中

时间:2012-11-08 04:38:08

标签: c++ binary binary-data

我的算法产生9位和17位的流我需要找到将这些数据存储在文件中的解决方案。但我不能只将9位存储为int,将17位存储为int_32。

例如,如果我的算法产生10x9bit和5x17bits,则outfile大小需要为22bytes。

另外一个要解决的问题是out文件可能非常大,文件大小未知。

我现在唯一的想法是使用bool * vector;

2 个答案:

答案 0 :(得分:0)

如果你必须保存动态位,那么你应该保存两个值:第一个是位数(如果位是从0到x连续),是一个位掩码哪些位有效;第二个是代表你的位的32位整数。

答案 1 :(得分:0)

从字面上看你的例子:如果你想存储175位并且它由两个不同长度的未知数量的实体组成,那么该文件绝对不能只有22个字节。您需要知道文件中的前景,您需要长度。如果你只有两种可能的尺寸,那么它只能是一位。 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位实体,存储在文本文件中。