我不清楚阅读长整数是如何工作的。如果我说
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 :(得分:10)
o.write
不写字符,它写入字节(如果用ios :: binary标记)。使用char指针是因为char的长度为1 Byte。
o.write((char*)a,sizeof(a));
(char*) a
是o.write
应该写的地址。然后它将sizeof(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;
}
答案 1 :(得分:-2)
抱歉,我花了很长时间才看到你的问题。
我认为二进制文件的区别在于二进制文件会按原样读写文件。但是非二进制(即文本)模式将使用回车符'\ _'来修复行尾“\ n”。修复将在'\ n'和'\ r'之间或“\ n \ r”或“\ r \ n”之间来回切换,或将其保留为'\ n'。它的作用取决于目标操作系统是Mac,Windows,Unix等。
我认为如果你正在读写一个整数,它会读取和写出你的整数,它看起来是正确的。但是如果整数的某些字节看起来像'\ r'和'\ n',则整数将无法从文件中正确读回。
Binary确保读回int总是正确的。但是,您希望文本模式格式化要在文本编辑器(如Windows的记事本)中读取的文件。