2016-07-27 106 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'。當你用文本編輯器打開你創建的文件時,它會嘗試將這些數據解釋爲文本,但不能提供可讀的結果。

想象一下,將液體儲存在瓶子裏。如果你沒有標籤,沒有人知道它是什麼。如果您將這種液體倒入汽車中,它會嘗試將其作爲汽油使用,並有可能破壞您的發動機。幸運的是,電腦更爲寬容。

大多數文件存儲有關數據如何在其標題中解釋的信息,以便程序可以檢查文件類型是否受支持。因此,試圖在媒體播放器中打開此文件很可能會告訴您,不支持此格式,而不是將數據解釋爲媒體。

相關問題