10

我不清楚读取长整数是如何工作的。如果我说

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));

如何使用存储在多个字节字符数组中的信息显示与存储相同的数字?

4

2 回答 2

11

o.write不写字符,它写字节(如果用 ios::binary 标记)。使用 char 指针是因为 char 的长度为 1 字节。

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

(char*) ao.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;
}
于 2013-02-22T07:00:20.700 回答
-4

对不起,我花了这么长时间才看到你的问题。

我认为二进制之间的区别在于二进制会按原样读取和写入文件。但是非二进制(即文本)模式将用回车符'\r' 修复行尾'\n'。修复将在 '\n' 和 '\r' 或 "\n\r" 或 "\r\n" 之间来回切换,或者将其保留为 '\n'。它的作用取决于目标操作系统是 Mac、Windows、Unix 等。

我认为如果你正在读写一个整数,它会很好地读写你的整数,并且看起来是正确的。但是,如果整数的某些字节看起来像 '\r' 和 '\n',则整数将无法从文件中正确读取。

二进制确保读回一个 int 总是正确的。但是您希望文本模式来格式化文件,以便在文本编辑器(如 Windows 的记事本)中读取。

于 2016-09-27T22:28:24.840 回答