2012-11-13 22 views
5

Tôi đang cố gắng viết vectơ tăng gấp đôi thành tệp nhị phân. Sau khi làm điều này tôi muốn đọc nó. Điều này dường như không hoạt động. Đây là mã:Viết vector <double> vào tệp nhị phân và đọc lại lần nữa

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; 
} 

này kết quả đầu ra "0 1 2 3 0 0 0 ......" vì vậy có vẻ như nó đọc 4 số đầu tiên một cách chính xác.

+3

Đối số kích thước 'write()' là không chính xác. Nó phải là 'v.size() * sizeof (double)'. – hmjd

+0

@ K-ballo 'skipws' không áp dụng cho đầu vào chưa được định dạng. –

Trả lời

7

.write() này có số lượng byte, không phải là số mục viết:

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

Vì bạn đã tính toán giá trị chính xác, sử dụng nó:

bestand.write(pointer, bytes); 
+0

hmjd đánh bại tôi trong 30 giây. –

+0

@MagnusHoff Tất nhiên. Đã sửa. –

+0

Tác phẩm này cảm ơn bạn! Giả sử tôi có vòng lặp for, hãy viết một vectơ mới mỗi lần lặp lại vào cùng một tệp. Tôi phải thay đổi điều gì để đọc? Ngoài ra, nhưng điều này trong một vòng lặp for? – pivu0

Các vấn đề liên quan