【问题标题】:Writing bytes to a file将字节写入文件
【发布时间】:2017-03-31 16:25:34
【问题描述】:

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

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 已经是一个指针或数组。 ( char * )&amp;pixels 的几率非常高,您不希望在第一个示例中出现 &amp;
  • 注意&amp;pixels返回一个指向指针的指针,你为什么要那个?

标签: c++ ifstream ofstream


【解决方案1】:

实际上 &amp;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 风格的转换。

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多