二进制文件中的某些数据如图所示,并以奇怪的方式显示OS

Why some data in binary file is shown as it is and other is shown in a strange way

本文关键字:方式 OS 显示 数据 二进制文件      更新时间:2023-10-16

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

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

例如,当我写入文件结构{一个,1,一个}和打开.txt文件时,一切都可以正常工作:

ONE ol的

ONE olHomhomhomhomhomholomhomhomholomhomhomholomhomholomho了电电ph> ONE olomoly的电电lommomhomhomhomhomhomhomhomhomhomhomhomhomhomhomhommommommomhomom都是lommommommommommommomommommommom都是

所以我被问到是谁显示的,这取决于什么,但是我不能为这个问题提供一个很好的扩展范围

编辑:我用来写的代码

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 ***nn";
}

P.S.当我从文件中阅读时,一切正常

您在文件中写154个钟表,只有一个是char,因此您的文字尝试阅读Ch​​arir,但主要是垃圾。您写二进制,您不希望能够读取某些可读性。

显示了二进制文件中的某些数据,如它所示,而另一个数据以奇怪的方式显示

看来,您正在尝试读取二进制数据,因为它包含了字符通用的数据。其中一些 - 但不是全部。也许这是谁,这似乎很奇怪。除此之外,输出似乎是完全合理的。

它显示的是谁

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

什么取决于

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