【问题标题】:Writing bitstrings to a binary file in C++在 C++ 中将位串写入二进制文件
【发布时间】:2021-06-07 10:49:16
【问题描述】:

我正在开发一个压缩器,它使用 C++ 中的 Huffman 编码压缩文本文件。执行编码后,我得到一个表示编码文件的位串(假设任意长度或说长度 = 2611)。现在,我想将此位串写入二进制文件。我怎样才能做到这一点? bitset 能有用吗?

我知道文件大小必须是整数字节,所以我将填充位串以使长度成为 8 的倍数。

我看到了一些其他相关的问题,但他们使用了预先确定的大小位集。在我的情况下,位串可能很长。

提前致谢!

PS:我只想写入二进制文件,而不是文本文件,否则编码将毫无意义。

EDIT1:以位串为例 - “10010101010010101010101011101100001001000101011110110101001010101001001010110101” 长度为 80,表示 10 个字节。我想将这 10 个字节写入二进制文件。我怎样才能从位串开始呢?

【问题讨论】:

  • 就实际的 C++ 代码而言,什么是“位串”?将如何表示?
  • @PaulMcKenzie by bitstring 我的意思是我有一个二进制字符串。所有字符为 1 或 0 的字符串。
  • @PaulMcKenzie 我将其存储为 c++ 字符串。
  • 您必须将其转换为字节。然后将它们写入文件。
  • 顺便说一句:我电脑上的所有文件都是二进制文件。 ;)

标签: c++ binaryfiles bitset bitstring


【解决方案1】:

这个例子是否回答了你的问题,将 bissets 写入文件?

据我所知,您可以将bitset 直接写入文件

#include <iostream>
#include <string>
#include <bitset>
#include <fstream>

int main ()
{
  std::ofstream ofs ("testfile", std::ofstream::out);
  std::bitset<16> foo; // not intialized
  std::bitset<16> bar (0xfa2);
  std::bitset<16> baz (std::string("0101111001"));

  std::cout  << "foo: " << foo << '\n';
  std::cout << "bar: " << bar << '\n';
  std::cout  << "baz: " << baz << '\n';

  ofs << "foo: " << foo << '\n';
  ofs << "bar: " << bar << '\n';
  ofs << "baz: " << baz << '\n';
  ofs.close();
  return 0;
}

此代码将在控制台中输出:

foo: 0000000000000000
bar: 0000111110100010
baz: 0000000101111001

testFile文件中的相同输出

【讨论】:

  • 遗憾的是,这在我的情况下不起作用。如果我错了,请纠正我,如果我使用大小为 8 的位集(或任何其他固定大小)并用位串初始化它(就像你为 baz 所做的那样),它会将位串剪辑到那么多位,因此我会丢失我的编码位。
  • 感谢您的提问和评论。您能否提供一个您希望社区帮助您的输入/输出示例?您可以编辑您的问题并添加示例
  • 添加了一个示例位串。
  • 我似乎不明白你的例子。你在你的程序中输入了什么,你需要什么作为输出。我不明白:“我怎么能从位串开始呢?”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多