将大的二进制字符串写入二进制文件

时间:2019-09-26 18:02:50

标签: c++ file-io

我有一个大的字符串(122k长),为0和1s(010011101 ...),需要将它们作为0和1而不是它们的字符表示形式写入二进制文件。

我尝试过的事情:

  • Outputting a Binary String to a Binary File in C++-这是一个很好的解决方案,但是,据我所知,我将有多个大小不同的字符串,并且在运行时,位集需要一个大小。
  • 斯坦福C ++库具有一个可以工作的writebit函数,但这要花很长时间,因为每一位都打开了一个写函数。
  • 实现outputfile.write()的不同方法,但是它们都写0和1的字符表示。

理想情况下,我宁愿使用标准库。谢谢您的提前帮助。

1 个答案:

答案 0 :(得分:2)

您可以将每个八位组合成一个字符:

int n = 0;
uint8_t value = 0;
for(auto c : str)
{
    value |= static_cast<unint8_t>(c == '1') << n;
    if(++n == 8)
    {
        // print value or buffer it elsewhere, if you want
        // to print greater chunks at once
        n = 0;
        value = 0;
    }
}
if(n != 0)
{
    // one partial byte left
}

字节有固定数量的位(通常为8位),您不能只丢弃它们,它们会进入您的文件。因此,当再次解码时,您需要某种方式来指定要丢弃多少位。您可以附加一个字节,最后一个字节中有多少位有效,可以通过某种方式对总位数进行编码(并可以检查是否已读取足够的字节),...

相关问题