我的algoritm生成9位和17位的流,我需要找到解决方案来将这些数据存储在文件中。但我不能只将9位存储为int,将17位存储为int_32。
例如,如果我的algoritm生成10x9bit和5x17bit,则输出文件大小需要为22字节。
另外,要解决的一个大问题是输出文件可能非常大,并且文件的大小未知。
我现在唯一的想法是使用bool *vector;
发布于 2012-11-08 14:53:26
如果您必须保存动态位,那么您可能应该保存两个值:第一个是位数(如果位是从0到x的连续位),或者是一个位掩码来说明哪些位是有效的;第二个是代表您的位的32位整数。
发布于 2012-11-08 17:35:11
从字面上看你的例子:如果你想存储175位,并且它由两个不同长度的未知数量的实体组成,那么文件绝对不可能只有22个字节。你需要知道文件中的内容,你需要它的长度。如果你只有两个可能的大小,那么它只能是一个比特。0表示9位,1表示17位。
|0|9bit|0|9bit|1|17bit|0|9bit|1|17bit|1|17bit|...因此,对于您的示例,您需要10*(1+9)+5*(1+17) =190bit~ 24字节。未完成的2位需要用0填充,以便在字节边界对齐。事实上,您将继续读取该文件,就好像存在另一个实体(因为您说您不知道该文件有多长),这应该不是问题,因为最后这样的填充总是少于9位。当到达文件末尾时,您可以丢弃最后一个未完成的读取。
这种方法确实需要实现字节级流的位级操作。这意味着仔细的掩蔽和逻辑操作。BASE64就是这样,只是比你简单,只由固定的6位实体组成,存储在文本文件中。
https://stackoverflow.com/questions/13282489
复制相似问题