为什么使用write函数而不是整数使用二进制文件将奇怪的符号写入二进制文件?

时间:2015-09-23 02:52:59

标签: c++ fstream

我有一个包含20个数字的数组。我正在尝试将每个数字添加到数组中,但我是以二进制形式进行的。我在二进制文件中这样做的原因是因为我正准备明天为我的考试做准备。这是我的代码。

file.open(fileName, ios::out | ios::binary);
for (int number = 0, index = 0; index < 20; index++) {
    number = numbers[index];
    if (!file.eof()) {
        file.write(reinterpret_cast<char *>(&number), sizeof(number));
    } else {
        break;
    }
}

文本文件的输出是:“$ 1 @Qdyꩃ·!Di”

为什么呢?我知道数组是填充的,因为我使用了一个cout语句来查看其中的内容。我也知道用于获取数字的变量是有效的,因为我使用了一个cout来查看它是否正确地从数组中获取值。

1 个答案:

答案 0 :(得分:2)

当您以二进制模式将整数写入文件时,您也应该以二进制模式将它们读回。文本编辑不能这样做。

此外,数据将以系统特定的方式写入,即首先是最低有效字节或最高有效字节。文本编辑器将这些数字重新解释为字符,因此您会看到“垃圾”输出。

文件时,无需检查eof(),因此您可以从代码中删除它。

file.open(fileName, ios::out | ios::binary);
for (int number = 0, index = 0; index < 20; index++) {
    number = numbers[index];
    file.write(reinterpret_cast<char *>(&number), sizeof(number));
}

为了确保您编写了正确的数据,请编写一个以二进制模式从文件读取的小程序,并将数字打印为整数。您将看到numbers[]数组中的数字。