私は、intやシンプルな構造体などのさまざまな値をバイナリファイルにエクスポートしようとしています。ここにいくつかのコードがあります:ostream ::構造体全体が書き込まれませんか?
#include <iostream>
#include <fstream>
#include <cstdint>
using namespace std;
template<class T> void writeToStream(ostream& o, T& val)
{
o.write((char*)&val, sizeof(T));
cout << o.tellp() << endl; //always outputs 4
}
struct foo {
uint16_t a, b;
};
int main()
{
foo myFoo = {42, 42};
ofstream test("test.txt", ios::binary);
writeToStream(test, myFoo);
test.close();
}
プログラムは4バイトの出力ファイルを生成する必要があります。しかし、私がそれを開くと、2バイトしかありません。 myFoo.a
とmyFoo.b
を256以上の値に変更すると(格納に1バイト以上必要)、ファイルは4バイトになります。私はWin7でVisual Studio 11 Developer Previewを使用しています。私は他のシステムやコンパイラで同じことが起こっていないかどうか確認していません。 256以下のaまたはbの値に対して正しく出力するにはどうすればよいですか?
ファイルの長さはどのように決められていますか? –
さて、私はメモ帳++でそれを開いていましたが、それは256未満の値の場合は2文字、それ以外の場合は4文字で表示されました。しかし、私はファイルを右クリックして "プロパティ"をクリックすると4バイトを表示します... – Mark
私はそこにあなたの問題があると思います。バイナリファイルサイズをテキストエディタで表示して決定しようとしています。 –