[英]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*) a
是o.write
應該寫的地址。 然后它將sizeof(a)
字節寫入文件。 沒有存儲字符,只有字節。
如果你在十六進制編輯器中打開文件,你會看到類似這樣的東西,如果a是int i = 10
: 0A 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.