簡體   English   中英

在C ++中讀取和寫入二進制文件

[英]Reading and writing int to a binary file in C++

我不清楚閱讀長整數是如何工作的。 如果我說

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

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

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

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

(char*) ao.write應該寫的地址。 然后它將sizeof(a)字節寫入文件。 沒有存儲字符,只有字節。

如果你在十六進制編輯器中打開文件,你會看到類似這樣的東西,如果a是int i = 100A 00 00 00 (4字節,在x64上)。

閱讀是模擬的。

這是一個工作示例:

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

對不起,我花了很長時間才看到你的問題。

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

我想如果你正在讀寫一個整數,它會讀取和寫出你的整數,它看起來是正確的。 但是如果整數的某些字節看起來像'\\ r'和'\\ n',則整數將無法從文件中正確讀回。

二進制確保讀回int總是正確的。 但是,您希望文本模式格式化要在文本編輯器(如Windows的記事本)中讀取的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM