将字节写入文件

时间:2017-03-31 16:25:34

标签: c++ ifstream ofstream

我有一个字节数组,定义为:

unsigned char * pixels = new unsigned char[pixelsLen];

我希望将此数组中的所有字节写入.bmp文件。

这是不起作用的方式:

ifstream screen ( "input.bmp", ios::binary | ios::in );
ofstream output ( "output.bmp", ios::binary | ios::out | ios::app );
output.write( ( char * )&pixels, pixelsLen );
output.close();

这就是它的工作原理:

ifstream screen ( "input.bmp", ios::binary | ios::in );
ofstream output ( "output.bmp", ios::binary | ios::out | ios::app );
for ( size_t i = 0; i < pixelsLen; i++ ) {
    output.write( ( char * )&pixels[i], 1 );
}
output.close();

问题是为什么当我逐字节地写它时它起作用,而当我试图一次写它时它不起作用?

1 个答案:

答案 0 :(得分:2)

实际上&pixels返回指向指针的指针,但std::ostream::write函数获取指针。所以试试这个:

ifstream screen ( "input.bmp", ios::binary | ios::in );
ofstream output ( "output.bmp", ios::binary | ios::out | ios::app );
output.write( reinterpret_cast<char *>(pixels), pixelsLen );
output.close();

还要尽量避免使用C风格的演员。