2016-07-27 2 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

모든 것이 바이트 (또는 char []')에서 C++로 바뀌었기 때문입니다. 'std :: ios :: binary'는 단지 원시 파일을 읽는다. 텍스트 파일에만 의미가있는 번역은하지 않는다. (표준은 실제로 의미를 알 수 없다.) – dhke

+0

_else_ 무엇을 기대 했습니까? 바이너리 파일을 열고 각 바이트를'cout '으로 선택했다. 이 상황에서 또 무슨 일이 일어날까요? –

+0

파일 내용의 이상한 모양은 이진 컴퓨터 코드입니다. 바이너리 파일을 보호하기 위해 콘텐츠를 적용 할 수 없습니다. 하지만 여기 열어 볼 때 정상적으로 볼 수 있습니까? . 내 프로그램이 옳은가 틀린가? –

답변

0

궁극적으로 파일에 데이터를 저장하고 있습니다. 이 데이터가 나타내는 것은 사용자의 몫입니다. 결국 '1'과 '0'입니다. 텍스트 편집기로 작성한 파일을 열면이 데이터를 읽을 수있는 결과를 제공하지 않는 텍스트로 해석합니다.

병에 액체를 저장한다고 상상해보십시오. 레이블을 지정하지 않으면 누구도 그 라벨을 알 수 없습니다. 그런 다음이 액체를 차에 부으면 휘발유로 사용하여 잠재적으로 엔진을 파멸시킵니다. 다행히도 컴퓨터는 훨씬 더 관대합니다.

대부분의 파일은 헤더 형식으로 데이터를 해석 할 수있는 방법에 대한 정보를 저장하므로 프로그램은 파일 형식이 지원되는지 여부를 확인할 수 있습니다. 예를 들어 미디어 플레이어에서이 파일을 열려고하면 데이터를 미디어로 해석하는 대신이 형식이 지원되지 않는다고 할 수 있습니다.

관련 문제