我有一个字节数组,定义为:
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();
问题是为什么当我逐字节地写它时它起作用,而当我试图一次写它时它不起作用?
答案 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风格的演员。