为什么它使用写入函数而不是整数将奇怪的符号写入二进制文件?
Why is it writing strange symbols into the file in binary using the write function and not the intergers?
我有一个包含 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 来查看它是否正确地从数组中获取值。
当您以二进制模式将整数写入文件时,您也应该以二进制模式读回它们。文本编辑器无法做到这一点。
此外,数据将以系统特定的方式写入,即最低有效字节在前或最高有效字节在前。文本编辑器将这些数字重新解释为字符,因此您会看到 "garbage" 输出。
当您 写入 文件时,不需要检查 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[]
数组中的数字。
我有一个包含 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 来查看它是否正确地从数组中获取值。
当您以二进制模式将整数写入文件时,您也应该以二进制模式读回它们。文本编辑器无法做到这一点。
此外,数据将以系统特定的方式写入,即最低有效字节在前或最高有效字节在前。文本编辑器将这些数字重新解释为字符,因此您会看到 "garbage" 输出。
当您 写入 文件时,不需要检查 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[]
数组中的数字。