不能将1和0的字符串写入二进制文件C ++

时间:2014-03-23 13:19:20

标签: c++ binary

我有一个函数,它接收一个指向一个字符串的指针,该字符串的名称为file to open,并用1和0编码; codedLine 包含 010100110101110101010011 之类的内容 写入二进制文件后我完全一样......你会推荐吗?谢谢。

    void codeFile(char *s)
{
    char *buf = new char[maxStringLength];
    std::ifstream fileToCode(s);
    std::ofstream codedFile("codedFile.txt", std::ios::binary);
    if (!fileToCode.is_open())
        return;
    while (fileToCode.getline(buf, maxStringLength))
    {
        std::string codedLine = codeLine(buf);
        codedFile.write(codedLine.c_str(), codedLine.size());
    }
    codedFile.close();
    fileToCode.close();
}

1 个答案:

答案 0 :(得分:1)

  

写入二进制文件后,我有完全相同的......

我想你想将std::string输入转换为二进制等效值。

您可以使用std::bitset<>类将字符串转换为二进制值,反之亦然。将字符串直接写入文件会导致字符值'0''1'的二进制表示。

如何使用它的示例:

std::string zeroes_and_ones = "1011100001111010010";
// Define a bitset that can hold sizeof(unsigned long) bits
std::bitset<sizeof(unsigned long) * 8> bits(zeroes_and_ones);

unsigned long binary_value = bits.to_ulong();

// write the binary value to file
codedFile.write((const char*)&binary_value, sizeof(unsigned long));

注意
以上示例适用于标准。对于早期版本,无法直接从字符串初始化std::bitset。但是可以使用operator>>()std::istringstream来填充它。