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

Why is it writing strange symbols into the file in binary using the write function and not the intergers?

本文关键字:符号 二进制文件 整数 write 函数 为什么      更新时间:2023-10-16

我有一个包含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ê©f·!迪"

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

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

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

当您写入文件时,不需要检查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[]数组中的数字。