如何写入数据位以形成二进制文件?

时间:2014-10-18 06:33:18

标签: c++ binaryfiles

我读了一个二进制文件(文件可以是任何东西......比如jpg或任何类型的二进制文件甚至文本文件)一点一滴。如何用这些位获得相同的文件?

1 个答案:

答案 0 :(得分:1)

考虑到你的问题有多广泛,我只是在暗中捅。假设您逐字节读取文件,然后将每个字节转换为位字符串,您可以使用以下函数来反转:

string readBitString(ifstream &stream)
{
    stringstream input;

    char c;
    while (stream.get(c))
    {
        for(int i = 7; i >= 0; i--)
        {
            input << ((c >> i) & 1);
        }
    }

    return input.str();
}

void writeBitString(ofstream &stream, string input)
{
    stringstream inputStream(input);

    char bits[9];
    char c;

    while(inputStream.get(bits, 9))
    {
        for(int i = 7; i >= 0; i--)
        {
            if(bits[7-i] == '1')
            {
                c |= 1 << i;
            }
            else
            {
                c &= ~(1 << i);
            }
        }

        stream << c;
    }
}

int main ()
{
    ifstream in("test.bin", ios::binary | ios::in);
    ofstream out("test-out.bin", ios::binary | ios::out);

    string input = readBitString(in);
    in.close();

    writeBitString(out, input);
    out.close();

    return 0;
}