2011-11-17 11 views
1

バイナリデータをファイルに書き込むプログラムで作業しています。 Windowsでは、結果ファイルは何らかの理由でLinuxよりもわずかに小さくなります。バイト単位のサイズとMD5ハッシュはどちらも異なります。これはどのように同じコードで起こりますか?バイナリファイルは、WindowsよりLinuxの場合よりも小さくなります。

私は私のプログラムでアプリケーション検証ツールを実行し、それが可能なメモリ破損に関するエラーや警告を生成しませんでした

ofstream output("output", ifstream::binary); 
output << std::noskipws; 

...私はすでにifstream::binaryフラグを追加し、私はnoskipwsを設定することを確認しました。

ファイルの出力が異なる可能性がある他の理由はありますか?

+2

この効果をもたらす完全なプログラムを投稿できますか? –

+9

これらのファイルを16進エディタで比較し、その違いを確認してください。 – JosephH

+0

どのタイプのバイナリデータが書き込まれていますか?それはテキストですか? –

答えて

2

違いはおそらく異なる開発環境のためです。異なるコンパイラ、ハードウェア、およびオペレーティングシステムはすべて、基礎をなすデータのフォーマットを変更することができます。たとえば、さまざまなコンパイラがさまざまな効率でデータ構造をパックすることがあります。また、基本的な型(ints、longs、floatなど)は、プロセッサによって異なるため、サイズが異なる場合があります。要するに

、バイナリデータ間のクロスプラットフォームの互換性を必要とするプログラムは、データを読み取るためのバイナリ形式に構造および値を梱包するための非常に正確なルール(しばしばフィールドに、そして均等に正確なルールを策定。

+0

*たとえば、さまざまなコンパイラがさまざまな効率でデータ構造をパックすることができます。*この角度をさらに調査します。あなたはおそらくこれが問題であることについて正しいでしょう。 – Pieter

1

見なしあなたがファイルに書いているものとそれをどのように呼び出すのか、本当に便利な答えを与えるのは難しいですが、ファイル挿入のためにストリーム挿入演算子(別名書式付き出力演算子)を使用している場合は、 -stringデータは、あなたのロケール設定に従って文字列に変換されます。実際に何をしているのかというと、ofstream::binaryを使用すると、とにかくテキストを書くだけなので、何の意味もありません。

違いがある最小限の例を作成し、何が起こっているかを見るために16進エディタで出力を調べることをお勧めします。