2012-11-13 21 views
5

バイナリファイルにダブルベクトルを書き込もうとしています。 この後、私はそれを読んでいます。これはうまくいかないようです。ここ コードである:正しく最初の4つの数字を読み取る思わようベクトル<double>をバイナリファイルに書き込んで再度読む

ofstream bestand; 
vector<double> v (32); 
const char* pointer = reinterpret_cast<const char*>(&v[0]); 
size_t bytes = v.size() * sizeof(v[0]); 
bestand.open("test",ios::out | ios::binary); 
for(int i = 0; i < 32; i++) 
{ 
    v[i] = i; 
    cout << i; 
    } 
bestand.write(pointer, v.size()); 
bestand.close(); 
ifstream inlezen; 
vector<double> v2 (32); 
inlezen.open("test", ios::in | ios::binary); 
char byte[8]; 
bytes = v2.size() * sizeof(v2[0]); 
inlezen.read(reinterpret_cast<char*>(&v2[0]), bytes); 
for(int i =0; i < 32; i++){ 

cout << endl << v2[i] << endl; 
} 

これは "... 0 1 2 3 0 0 0" を出力します。

+3

'write()' size引数が不正です。これは 'v * sizeof(double)'でなければなりません。 – hmjd

+0

@ K-ballo 'skipws'はフォーマットされていない入力には適用されません。 –

答えて

7

この.write()バイトの数をとり、アイテムの数ではありませんが、書くこと:

bestand.write(pointer, v.size()); 

すでに正しい値を計算したので、それを使用する:

bestand.write(pointer, bytes); 
+0

hmjdが30秒遅れました。 –

+0

@MagnusHoffもちろん。一定。 –

+0

ありがとうございました! forループがあり、同じファイルに新しいベクトルを書き込むと仮定します。私は何を読み返す必要がありますか?また、これはforループのですか? – pivu0

関連する問題