2017-03-31 110 views
0

我定义为字节数组:字节写入到文件

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

从第二个样本看起来像像素已经是一个指针或数组。 '(char *)&像素'的几率非常好,你不想在第一个样本中使用'&'。 – user4581301

+1

请注意'&像素'返回一个指向指针的指针,为什么要这么做? –

回答

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风格的铸造。