为什么使用write函数而不是整数将奇怪的符号写入二进制文件
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ê©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[]
数组中的数字。
相关文章:
- 如何从二进制文件中的给定符号中获取调用程序图
- 将无符号字符的向量写入二进制文件 c++
- vs comperied二进制文件中的符号
- 使用不同.dll(导出相同的符号)静态链接的二进制文件
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- 无法使用 fstream 从二进制文件中读取字符串,而是显示奇怪的符号
- g++ 编译:我可以链接到带有符号链接二进制文件的目录吗?
- 将fortran生成的二进制文件读取到C++中的带符号整数数组中
- 计算 c# 中二进制文件符号的频率不起作用,但适用于等效的 c++ 代码
- 无法将大型无符号整数正确写入二进制文件 - C++
- 正在尝试读取4字节无符号整数的二进制文件并转换为伏特
- 向二进制文件写入和读取无符号字符
- 如何在没有文件、objdump或gdb的情况下知道二进制文件是否包含调试符号
- 如何避免iOS二进制文件中的符号和源路径
- 为什么使用write函数而不是整数将奇怪的符号写入二进制文件
- 带有调试符号的Clang二进制文件太大
- 类型是否在最终二进制文件中公开?它们在符号文件和RTTI中可用吗?
- 用c++将无符号字符存储为二进制文件
- 使用write()将无符号字符写入二进制文件
- 如何将二进制文件读入无符号字符向量