2013-02-22 124 views
6

我不清楚讀取長整型是如何工作的。如果我說在C++中讀取和寫入int到二進制文件

long int a[1]={666666} 
ofstream o("ex",ios::binary); 
o.write((char*)a,sizeof(a)); 

到值存儲到一個文件,要閱讀他們回來,因爲它是

long int stor[1]; 
ifstream i("ex",ios::binary); 
i.read((char*)stor,sizeof(stor)); 

我如何能夠顯示相同數量的使用存儲在多個信息存儲字符數組的字節?

+0

你能更具體嗎? – 2013-02-22 06:18:33

+0

我想了解如何讀取存儲在二進制文件中的整數值[4個字節]。 – user2097891 2013-02-22 06:20:33

+4

你的代碼是不是已經這樣做了? – 2013-02-22 06:22:39

回答

11

o.write不寫字符,它寫字節(如果標記爲ios :: binary)。使用char指針是因爲char的長度爲1 Byte。

o.write((char*)a,sizeof(a)); 

(char*) a是什麼o.write應該寫ADRESS。然後它將sizeof(a)字節寫入文件。沒有字符存儲,只是字節。

如果你在一個十六進制編輯器打開該文件,你會看到這樣的事情,如果是int i = 100A 00 00 00(4字節,在64位)。

閱讀是模擬的。

這裏是一個工作示例:

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 


int main (int argc, char* argv[]){ 
    const char* FILENAM = "a.txt"; 
    int toStore = 10; 
    ofstream o(FILENAM,ios::binary); 

    o.write((char*)&toStore,sizeof(toStore)); 
    o.close(); 

    int toRestore=0; 
    ifstream i(FILENAM,ios::binary); 
    i.read((char*)&toRestore,sizeof(toRestore)); 

    cout << toRestore << endl; 


    return 0; 
} 
+1

你好,我有這個問題。如果不用二進制標記文件對象會發生什麼? – Darktega 2016-02-06 05:28:48

0

對不起,我花了這麼長時間,看看你的問題。

我認爲二進制的區別在於二進制將讀寫文件原樣。但非二進制(即文本)模式將使用回車符'\ r'來固定行尾'\ n'。修復將在'\ n'和'\ r',或者\ n \ r或者\ r \ n之間來回切換,或者保留爲'\ n'。它的作用取決於目標操作系統是Mac,Windows,Unix等。

我想如果你正在讀寫一個整數,它會讀取和寫入你的整數,它看起來是正確的。但是,如果整數的一些字節看起來像'\ r'和'\ n',那麼整數將不會從文件正確讀回。

二進制文件確保讀回int總是正確的。但是你想要文本模式來格式化文件,以便在Windows記事本等文本編輯器中讀取。