2016-07-27 142 views
-3

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

  1. 输入字符串str - >炭ARR1 [] - > FILEOUT.DAT
  2. FILEOUT.DAT - >炭ARR2 [] - >印刷屏幕

有问题的代码:

#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; 
} 
+2

因为一切都只是C++的字节(或'char []')。 'std :: ios :: binary'只是或多或少意味着*读取原始文件,不做任何仅对文本文件有意义的翻译*(标准实际上保留了未定义的含义)。 – dhke

+0

你期望什么_else_?你打开一个二进制文件并选择“输出”每个字节。在这种情况下还会发生什么? –

+0

文件内容奇怪的外观是二进制计算机代码。我们将无法将这些内容应用于二进制文件中。但在这里,我可以像往常一样打开这种观点? 。我的程序是对还是错? –

回答

0

您最终将数据存储在文件中。这些数据代表的是你自己,请记住,它最终都是'1'和'0'。当你用文本编辑器打开你创建的文件时,它会尝试将这些数据解释为文本,但不能提供可读的结果。

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

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

相关问题