用C++将二进制字符串输出到二进制文件

Outputting a Binary String to a Binary File in C++

本文关键字:输出 二进制文件 字符串 二进制 C++      更新时间:2023-10-16

假设我有一个字符串,它包含一个类似于"0110110101011110110010010000010"的二进制值。有没有一种简单的方法可以将该字符串输出到二进制文件中,使文件包含0110110101011110110010010000010?我知道计算机一次写入一个字节,但我很难想出一种方法将字符串的内容作为二进制文件写入二进制文件。

使用位集:

//Added extra leading zero to make 32-bit.
std::bitset<32> b("00110110101011110110010010000010");
auto ull = b.to_ullong();
std::ofstream f;
f.open("test_file.dat", std::ios_base::out | std::ios_base::binary);
f.write(reinterpret_cast<char*>(&ull), sizeof(ull));
f.close();

我不确定这是否是您所需要的,但现在开始:

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
    string tmp = "0110110101011110110010010000010";
    ofstream out;
    out.open("file.txt");
    out << tmp;
    out.close();
}

确保输出流处于二进制模式。这可以处理字符串大小不是字节中位数的倍数的情况。额外的位设置为0。

const unsigned int BitsPerByte = CHAR_BIT;
unsigned char byte;
for (size_t i = 0; i < data.size(); ++i)
{
    if ((i % BitsPerByte) == 0)
    {
        // first bit of a byte
        byte = 0;
    }
    if (data[i] == '1')
    {
        // set a bit to 1
        byte |= (1 << (i % BitsPerByte));
    }
    if (((i % BitsPerByte) == BitsPerByte - 1) || i + 1 == data.size())
    {
        // last bit of the byte
        file << byte;
    }
}