为什么我看到二进制文件的内容?

时间:2016-07-27 08:31:03

标签: c++

为什么我可以打开并查看二进制文件。奇怪的外表是不可能的? http://codepad.org/OwX99H0p

  1. 输入字符串str - > char arr1 [] - > FILEOUT.DAT
  2. FILEOUT.DAT - > char arr2 [] - >印刷屏幕
  3. 有问题的代码:

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    void NhapMang(char *&arr, string str , int &n)
    {
        n = str.length();
        arr = new char[n];
        for (int i = 0; i < n;i++)
        {
            arr[i] = str[i];
        }
    }
    
    void XuatMang(char *arr, int n)
    {
        for (int i = 0; i < n;i++)
        {
            cout << arr[i];
        }
    }
    
    void GhiFile(ofstream &FileOut, char *arr, int n)
    {
        FileOut.open("OUTPUT.DAT", ios::out | ios::binary);
    
        FileOut.write(arr, n*sizeof(char));
    
        FileOut.close();
    }
    
    void DocFile(ifstream &FileInt, char *&arr, int n)
    {
        FileInt.open("OUTPUT.DAT", ios::in | ios::binary);
    
        arr = new char[n];
        FileInt.read(arr, n*sizeof(char));
    
        FileInt.close();
    }
    
    int main()
    {
        char *arr1;
        int n1;
    
        fflush(stdin);
        string str;
        getline(cin, str);
        NhapMang(arr1, str,n1);
    
        ofstream FileOut;
        GhiFile(FileOut, arr1, n1);
    
        char *arr2;
        int n2 = n1;
    
        ifstream FileInt;
        DocFile(FileInt, arr2, n2);
        XuatMang(arr2, n2);
    
        delete[] arr1;
        delete[] arr2;
    
        system("pause");
        return 0;
    }
    

1 个答案:

答案 0 :(得分:0)

您最终将数据存储在文件中。这些数据代表什么取决于你,请记住,它最终都是'1'和'0'。当您打开使用文本编辑器创建的文件时,它会尝试将此数据解释为不会产生可读结果的文本。

想象一下,将液体存放在瓶子里。如果你没有标记它,没有人知道它是什么。如果你将这种液体倒入汽车中,它会尝试将其用作汽油,并可能会破坏你的发动机。幸运的是,计算机更加宽容。

大多数文件存储有关如何在其标题中解释数据的信息,以便程序可以检查是否支持文件类型。因此,尝试在媒体播放器中打开此文件很可能会告诉您不支持此格式,而不是尝试将数据解释为媒体。