我有以下代码,我正在尝试将一些数据写入二进制文件。 问题是我对二进制文件没有任何经验,我无法理解我在做什么。
#include <iostream>
#include <fstream>
#include <string>
#define RPF 5
using namespace std;
int write_header(int h_len, ofstream& f)
{
int h;
for(h=0;h<h_len;h++)
{
int num = 0;
f.write((char*)&num,sizeof(char));
}
return 0;
}
int new_file(const char* name)
{
ofstream n_file(name,ofstream::binary);
write_header(RPF,n_file);
n_file.close();
return 0;
}
int main(int argc, char **argv)
{
ofstream file("file.dat",ofstream::binary);
file.seekp(10);
file.write("this is a message",3);
new_file("file1.dat");
cin.get();
return 0;
}
1.如您所见,我正在打开 file.dat 并在单词“thi”中写入。然后我打开文件,我看到它的 ASCII 值。为什么会这样?
- 然后我创建一个新文件 file1.dat 并尝试在其中写入数字 0 五次。 我应该使用什么?
这个
f.write((char*)&num,sizeof(char));
或者这个
f.write((char*)&num,sizeof(int));
为什么我不能按原样写入数字的值,而必须将其转换为 char*
?
这是因为 write()
是这样工作的还是我只能将字符写入二进制文件?
任何人都可以帮助我了解发生了什么吗?
最佳答案
函数 write() 指向数据缓冲区的指针和要流式传输到文件的数据的字节长度。所以当你说
file.write("this is a message",3);
您告诉写入函数在文件中写入 3 个字节。那就是“thi”。
这个
f.write((char*)&num,sizeof(char));
告诉写入函数将 sizeof(char) 个字节放入文件中。那是1个字节。你可能想要它
f.write((char*)&num,sizeof(int));
因为 num 是一个 int 变量。
关于C++ 和二进制文件 - 新手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008884/