将字节写入文件
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 风格的转换。
我有一个字节数组定义为:
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 风格的转换。