在 C++ 中将二进制字符串输出到二进制文件
Outputting a Binary String to a Binary File in C++
假设我有一个字符串,其中包含这样一个二进制文件“0110110101011110110010010000010”。有没有一种简单的方法可以将该字符串输出到二进制文件中,以便该文件包含 0110110101011110110010010000010?我知道计算机一次写入一个字节,但我无法想出一种方法将字符串的内容作为二进制文件写入二进制文件。
我不确定这是否是你需要的,但你可以:
#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;
}
}
使用位集:
//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();
假设我有一个字符串,其中包含这样一个二进制文件“0110110101011110110010010000010”。有没有一种简单的方法可以将该字符串输出到二进制文件中,以便该文件包含 0110110101011110110010010000010?我知道计算机一次写入一个字节,但我无法想出一种方法将字符串的内容作为二进制文件写入二进制文件。
我不确定这是否是你需要的,但你可以:
#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;
}
}
使用位集:
//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();