2017-03-31 94 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風格的鑄造。