将字节写入文件

Writing bytes to a file

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

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();

问题是为什么它在我逐字节写入时有效,而在我尝试一次写入时却无效?

实际上 &pixels returns 指向指针的指针,但 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 风格的转换。