为什么二进制文件中的某些数据显示为原样而另一些数据以奇怪的方式显示

时间:2017-05-02 14:37:51

标签: c++ binaryfiles

我有代码,它将这种结构的向量写入二进制文件:

struct reader{
             char name[50];
             int card_num;
             char title[100];
             }

一切都运行得很好但是当我,例如,写入文件结构{One,1,One}并打开存储它的.txt文件时,我看到了:

一ММММММММММММММММММММММММММММММММММММММММММММММММ一个ММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММ

所以我被问到为什么要显示它,它取决于什么,但我不能给出一个很好的答案

编辑: 添加了我用来写入文件的代码

void Write_to_File(vector<reader>& vec){
    cin.clear();   // clearing
    fflush(stdin);// input stream
    const char* pointer = reinterpret_cast<const char*>(&vec[0]);
    size_t bytes = vec.size() * sizeof(vec[0]);

    fstream f("D:\\temp.txt", ios::out);
    f.close();

    ofstream file("D:\\temp.txt", ios::in | ios::binary);
    file.write(pointer, bytes);
    file.close();

    remove("D:\\lab.txt");
    rename("D:\\temp.txt", "D:\\lab.txt");
    cout << "\n*** Successfully written data ***\n\n";
}

P.S。当我从文件中读取一切正常时

2 个答案:

答案 0 :(得分:0)

你在一个文件中写了154个八位字节,只有一个和一个是char,所以你的文本编辑器尝试读取char但大部分都是垃圾。你写二进制文件,你不应该期望有可读的东西。

答案 1 :(得分:0)

  

为什么二进制文件中的某些数据显示为原样,而其他数据以奇怪的方式显示

您似乎正在尝试读取二进制数据,就好像它包含字符编码数据一样。其中一些 - 但不是全部。也许这就是为什么你认为这看起来很奇怪。除此之外,输出似乎非常合理。

  

为什么会这样显示

因为这是对象在读者使用的字符编码中包含的数据的文本表示。

  

它取决于什么

这取决于您初始化内存的值。例如,第一个字符显示为O,因为您已使用值name[0]初始化'O'。一些数据是成员之间的填充,无法直接初始化。这些字节的值取决于未指定的内容。