简体   繁体   中英

Reading and writing int to a binary file in C++

I am unclear about how reading long integers work. If I say

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

to store values to a file and want to read them back as it is

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

how will I be able to display the same number as stored using the information stored in multiple bytes of character array?

o.write does not write character, it writes bytes (if flagged with ios::binary). The char-pointer is used because a char has length 1 Byte.

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

(char*) a is the adress of what o.write should write. Then it writes sizeof(a) bytes to a file. There are no characters stored, just bytes.

If you open the file in a Hex-Editor you would see something like this if a is int i = 10 : 0A 00 00 00 (4 Byte, on x64).

Reading is analogue.

Here is a working example:

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

Sorry I took so long to see your question.

I think the difference between binary is the binary will read and write the file as is. But the non-binary (ie text) mode will fix up the end-of-line '\\n' with carriage-return '\\r'. The fix-up will change back and forth between '\\n' and '\\r', or "\\n\\r" or "\\r\\n" or leave it as '\\n'. What it does depends on whether the target operating system is Mac, Windows, Unix, etc.

I think if you are reading and writing an integer, it will read and write your integer fine and it will look correct. But if some byte(s) of the integer look like '\\r' and '\\n', then the integer will not read back correctly from the file.

Binary assures that reading back an int will always be correct. But you want text mode to format a file to be read in a text editor such as Windows's Notepad.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM