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

Writing a large binary string to a binary file

本文关键字:二进制文件 字符串 大型 二进制      更新时间:2023-10-16

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

我尝试过:

  • 将二进制字符串输出到二进制文件 C++ - 这是一个很好的解决方案,但是,据我所知,我将有多个不同大小的字符串,并且 bitset 在运行时需要一个大小。
  • 斯坦福C++库有一个可以工作的写位函数,但这需要很长时间,因为每个比特都会打开一个写函数。
  • 实现 outputfile.write(( 的不同方式,但它们都编写了 0 和 1 的字符表示。

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

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

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
}

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