2012-02-11 5 views
11

Tôi có một câu hỏi rất đơn giản, điều này rất khó đối với tôi vì đây là lần đầu tiên tôi thử làm việc với các tệp nhị phân và tôi không hiểu chúng lắm. Tất cả những gì tôi muốn làm là viết một số nguyên vào một tệp nhị phân.viết số nguyên thành tệp nhị phân (C++)

Sau đây là cách tôi đã làm nó:

#include <fstream> 
using namespace std; 
int main() { 
    int num=162; 
    ofstream file ("file.bin", ios::binary); 
    file.write ((char *)&num, sizeof(num)); 
    file.close(); 
    return 0; 
} 

Ông có thể vui lòng cho tôi nếu tôi đã làm điều gì sai, và những gì?

Phần gây khó khăn cho tôi là phù hợp với file.write, tôi không hiểu.

Cảm ơn bạn trước.

+1

Tính năng này có hoạt động không? Làm thế nào nó khác với những gì bạn mong đợi? –

+2

Tư vấn Nitpick: 1) nói 'reinterpret_cast (& num)', và bỏ qua 'file.close()' và 'return 0', vì tất cả những điều đó xảy ra tự động. –

+0

@KerrekSB Bạn có thể giải thích những gì reinterpret_cast (& num) không? – eqagunn

Trả lời

19

Phần gây rắc rối cho tôi là phù hợp với tệp.write, tôi không hiểu điều đó.

Nếu bạn đọc tài liệu của ofstream.write() phương pháp, bạn sẽ thấy rằng nó yêu cầu hai đối số:

  1. một con trỏ đến một khối dữ liệu với nội dung được viết;

  2. giá trị số nguyên đại diện cho kích thước , tính bằng byte, của khối này.

Tuyên bố này chỉ đưa ra hai mảnh những thông tin cho ofstream.write():

file.write(reinterpret_cast<const char *>(&num), sizeof(num)); 

&num là địa chỉ của các khối dữ liệu (trong trường hợp này chỉ là một biến số nguyên), sizeof(num) là kích thước của khối này (ví dụ 4 byte trên nền tảng Windows).