其他分享
首页 > 其他分享> > 无法将1和0的字符串写入二进制文件C

无法将1和0的字符串写入二进制文件C

作者:互联网

我有一个函数,该函数接收一个指向带有文件名的字符串的指针以打开并以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();
}

解决方法:

After writing to binary file I have exactly the same…

我想您想将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.但是它可以使用运算符>>()和std :: istringstream填充.

标签:c,binary,c++11
来源: https://codeday.me/bug/20191012/1900743.html