C++ 和二进制文件 - 新手问题

标签 c++ file file-io binary fstream

我有以下代码,我正在尝试将一些数据写入二进制文件。 问题是我对二进制文件没有任何经验,我无法理解我在做什么。

#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 值。为什么会这样?

  1. 然后我创建一个新文件 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/

相关文章:

C++多态、函数调​​用

c++ - constexpr 参数化函数指针

c++ - libboost_python-py27.so.1.53.o 没有这样的文件或目录

c++ - osx 上的小线程 ID

ios - iOS平台如何监控文件变化?

c - 具有预定义一维数组的二维数组的动态输入

file-io - 如何在erlang中打开具有相关路径的文件?

python - os.startfile错误: FileNotFoundError: [WinError 2] The system cannot find the file specified:

Java在上传到AWS云之前创建文件副本

java - 异常打印两次