如何在 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
}
}
我使用 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
}
}