我正在弄清楚如何压缩文件,我想知道我是否可以使用输出文件进行位操作。
当前我有一个可变大小n的字符串,只包含0和1。 例如:010111001010110
我想输出一个只包含n位而不是n个字符的文件。
另外,如果可以的话,我该如何读取这些位并将其转换回字符串?
谢谢。
更新:如果我不能直接写出位并且必须将其打包成字节,这是否意味着我可以将8位转换为char并只输出char列表?如果是这样,如果我尝试存储“00000000”会发生什么,这意味着null?
答案 0 :(得分:1)
你不能直接写出比特,你必须至少打包它们。是的,这意味着写出字节。请注意,输出将基本上填充为字节,您必须对其执行某些操作。
要将包含0和1的字符串转换为原始数据,最简单的方法是使用std::bitset
,如果知道长度,或者编写一个按eights前进的循环,如
for (auto i = 0; i < str.size(); i += 8)
答案 1 :(得分:0)
如果你看一下arb255.zip的网,你会发现我的双射算术编码器。用于程序的io是BIT I / O,当然文件实际上是以字节为单位。但字符串对于字节文件是双射的。它全部在包含中处理,但就主要例程而言,它的真正的双向位IO。
实际上DJPP GNU C的旧代码是bijective.dogma.net 在当前C中工作需要进行一些更改,但I / O仍然可以正常工作