我可以用C ++输入/输出位

时间:2014-05-29 21:16:03

标签: c++ bit-manipulation bits

我正在弄清楚如何压缩文件,我想知道我是否可以使用输出文件进行位操作。

当前我有一个可变大小n的字符串,只包含0和1。 例如:010111001010110

我想输出一个只包含n位而不是n个字符的文件。

另外,如果可以的话,我该如何读取这些位并将其转换回字符串?

谢谢。

更新:如果我不能直接写出位并且必须将其打包成字节,这是否意味着我可以将8位转换为char并只输出char列表?如果是这样,如果我尝试存储“00000000”会发生什么,这意味着null?

2 个答案:

答案 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仍然可以正常工作