2013-02-22 216 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记事本等文本编辑器中读取。