如何在 C++ 中将字节写入文件?

How to write byte(s) to a file in C++?

我使用 std::bitset<8> bits 创建了一个位集,它相当于 00000000 即 1 个字节。 我将输出文件定义为 std::ofstream outfile("./compressed", std::ofstream::out | std::ofstream::binary) 但是当我使用 outfile << bits 编写 bits 时,outfile 的内容变为 00000000 但是大小文件大小为 8 个字节。 (bits 的每一位最终占用文件中的 1 个字节)。有没有办法真正将字节写入文件?例如,如果我写 11010001 那么这应该写成一个字节,文件大小应该是 1 个字节而不是 8 个字节。我正在为霍夫曼编码器编写代码,但我找不到将编码字节写入输出压缩文件的方法。

问题是 operator<< 是文本编码方法,即使您指定了 std::ofstream::binary。您可以使用 put to write a single binary character or write 来输出多个字符。请注意,您负责将数据转换为其 char 表示形式。

std::bitset<8> bits = foo();
std::ofstream outfile("compressed", std::ofstream::out | std::ofstream::binary);

// In reality, your conversion code is probably more complicated than this
char repr = bits.to_ulong();

// Use scoped sentries to output with put/write
{
    std::ofstream::sentry sentry(outfile);
    if (sentry)
    {
        outfile.put(repr);                  // <- Option 1
        outfile.write(&repr, sizeof repr);  // <- Option 2
    }
}