1

ビットマップ画像を生成するプログラムを書いています。テスト中に、C++ が余分なバイトを (一見ランダムな場所に) 書き込んでいるため、すべてのバイトがオフセットされていることがわかりました (その後、画像が台無しになりました)。配列からファイルに書き込みます。配列の完全な内容を計算すると、それらは完璧ですが、余分なバイトが常に書き込まれます。これは、ios::binary フラグを指定してファイルを開くことで修正されました。

まったく同じ配列から出力している場合、ios::binary フラグの有無にかかわらずファイルを開くことが問題になるのはなぜですか。

Code::Blocks 12.11 の使用、C++0X のデフォルト コンパイラ

4

1 に答える 1

4

ほとんどの場合 Windows を使用しており、一部の特殊文字 (改行など) がテキストファイルでどのように表現\nされるかについていくつかの規則があるためです。国旗。ファイルをバイナリ (非テキスト) モードで開いた場合、これらの変換は行われません。\r\n0x1E

また、Windows を使用していない場合でも、バイナリ データには常にバイナリ モードを使用してください。これが移植性の高い方法です。

于 2013-08-29T20:15:06.703 に答える