2009-07-29 3 views
2

편집 : 텍스트 파일을 바이트로 변환하려고합니다. 코드가 바이트로 변환하는지 여부는 확실하지 않습니다. 헤더에 대한 링크가 있으므로 as_bytes 함수를 볼 수 있습니다.이진 파일 입출력 문제

link 이제 출력 스트림은 단지 벡터의 내용을 출력한다

#include "std_lib_facilities.h" 

int main() 
{ 
    cout << "Enter input file name.\n"; 
    string file; 
    cin >> file; 
    ifstream in(file.c_str(), ios::binary); 

    int i; 
    vector<int> bin; 

    while(in.read(as_bytes(i), sizeof(int))) 
     bin.push_back(i); 

    ofstream out(file.c_str(), ios::out); 

    for(int i = 0; i < bin.size(); ++i) 
      out << bin[i]; 

    keep_window_open(); 
} 

참고. 쓰기 기능이나 2 진 모드는 사용하지 않습니다. 이것은 파일을 큰 수의 행으로 변환합니다.이게 제가 찾고있는 것입니까?

that guy likes to eat lots of pie (not sure if this was exact text) 

543518319544825700191924850016351970295432362115448292821701667182186922608417526375411952522351186935715718643976841768956006 
+0

안녕하세요, 바이너리로 정확히 무엇을 의미합니까? 너는 무엇을 기대하고 있니? –

+0

바이너리 파일을 읽고 쓰는 것으로되어 있습니다. 반드시 텍스트 파일을 이진 파일로 변경하지 않아도됩니다. 나는 그 질문을 편집 할 것이다. – trikker

+0

크게 달성하기 위해 노력하고있는 것을 명확히하기 위해 편집되었습니다. – trikker

답변

2

모든 파일이 저장되기 때문에 파일을 변경하지 않은 첫 번째 방법은 그 이유에 변 : 여기

는 두 번째 코드의 파일 변환의 예입니다 같은 길. 텍스트 파일과 이진 파일 간의 유일한 차이점은 텍스트 파일에는 ASCII 문자로 표시 될 수있는 바이트 만 포함되며 이진 파일 *에는 훨씬 다양한 임의성과 바이트 순서가 있다는 점입니다. 따라서 바이트를 바이트로 읽은 다음 바이트로 다시 출력합니다!

* 유니 코드 텍스트 파일은 문자 포인트와 사용 된 인코딩에 따라 하나의 문자 포인트를 나타 내기 위해 여러 바이트를 가질 수 있으므로 이진 파일로 포함됩니다.

두 번째 방법도 상당히 간단합니다. 이전과 같이 바이트를 읽고 정수 (아마도 4 바이트 길이)에 저장하고 있습니다. 그런 다음 정수를 마치 정수로 출력하므로 숫자 열이 표시됩니다.

첫 번째 방법으로 일부 바이트가 잘리는 이유는 코드에서 버그 일 가능성이 큽니다. 이 경우 아이디어가 무엇인지 설명하는 것이 더 중요하다고 생각했습니다. 테스트 코드를 디버깅하는 것이 아닙니다.

+0

예, 그게 실제 단어가 아닌 바이트로 읽는 것입니다. 그러나이 책은 여전히 ​​이진 파일로 참조합니다. – trikker

+0

모든 파일은 바이너리 파일이며, 열기 모드는 내용을 읽고 처리하는 방법을 결정합니다. 텍스트 모드에서 파일을 열었을 때 '\ n'값이 발견되면 바이너리 모드로 열 때이 문자는 개행 문자로 해석됩니다.이 문자는 해석되지 않습니다. –

+0

그래서 내가 뭘하려고하는지 바이트 형식으로 그들을 유지하고 같은 출력. 결국 바이트를 원래대로 되돌립니다. 나는 옳은 길을 가고 있는지 알지 못합니다. – trikker