2016-07-27 10 views
-3

なぜバイナリファイルを開いて見ることができますか?奇妙な外観は不可能ですか? http://codepad.org/OwX99H0pバイナリファイルの内容が表示されるのはなぜですか?

  1. 文字列strを入力 - > CHAR ARR1 [] - > FILEOUT.DAT
  2. FILEOUT.DAT - > CHAR 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'はちょうど多かれ少なかれ、* rawファイルを読むこと、*テキストファイル(*は実際には定義されていない意味を残しています)に意味のある変換をしないことを意味します。 – dhke

+0

あなたは何を期待しましたか?バイナリファイルを開き、各バイトを 'cout 'にしました。この状況ではほかに何が起こるでしょうか? –

+0

ファイル内容の奇妙な外観はバイナリのコンピュータコードです。バイナリファイルを守るためにコンテンツを適用することはできません。しかし、ここで私はそれを通常のように見ることができますか? 。私のプログラムは間違いありませんか? –

答えて

0

あなたは最終的にデータをファイルに保存しています。このデータが表すものはあなた次第ですが、最後にはすべて「1」と「0」です。テキストエディタで作成したファイルを開くと、このデータはテキストとして解釈され、読み込み可能な結果は得られません。

ボトルに液体を保存することを想像してください。あなたがそれにラベルを付けないと、誰もそれが何であるかを知ることはできません。この液体を車に注ぐと、ガソリンとして使用し、エンジンを潜在的に破壊します。幸いにも、コンピュータははるかに寛容です。

ほとんどのファイルには、ファイルの種類がサポートされているかどうかをプログラムがチェックできるように、ヘッダーでのデータの解釈方法に関する情報が格納されています。たとえば、このファイルをメディアプレーヤーで開くと、メディアとしてデータを解釈しようとするのではなく、この形式がサポートされていないことが伝えられます。

関連する問題