我不清楚读取长整数是如何工作的。如果我说
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));
如何使用存储在多个字节字符数组中的信息显示与存储相同的数字?
我不清楚读取长整数是如何工作的。如果我说
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 字节。
o.write((char*)a,sizeof(a));
(char*) a
是o.write
应该写的地址。然后它将sizeof(a)
字节写入文件。没有存储字符,只有字节。
int i = 10
如果您在 Hex-Editor 中打开文件,如果 a 为:
0A 00 00 00
(4 Byte, on 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;
}
对不起,我花了这么长时间才看到你的问题。
我认为二进制之间的区别在于二进制会按原样读取和写入文件。但是非二进制(即文本)模式将用回车符'\r' 修复行尾'\n'。修复将在 '\n' 和 '\r' 或 "\n\r" 或 "\r\n" 之间来回切换,或者将其保留为 '\n'。它的作用取决于目标操作系统是 Mac、Windows、Unix 等。
我认为如果你正在读写一个整数,它会很好地读写你的整数,并且看起来是正确的。但是,如果整数的某些字节看起来像 '\r' 和 '\n',则整数将无法从文件中正确读取。
二进制确保读回一个 int 总是正确的。但是您希望文本模式来格式化文件,以便在文本编辑器(如 Windows 的记事本)中读取。