2013-02-22 1 views
6

긴 정수를 읽는 방법에 대해 잘 모릅니다. 여러에 저장된 정보를 사용하여 저장된 나는C++의 이진 파일에 int 읽기 및 쓰기

long int a[1]={666666} 
ofstream o("ex",ios::binary); 
o.write((char*)a,sizeof(a)); 

파일에 값을 저장하고 내가 같은 번호를 표시 할 수있을 것입니다 방법

long int stor[1]; 
ifstream i("ex",ios::binary); 
i.read((char*)stor,sizeof(stor)); 

같이 그들을 다시 읽고 싶은 말한다면 문자 배열의 바이트?

+0

좀 더 구체적으로 기재 할 수 있습니까? –

+0

바이너리 파일에 저장된 정수 값 [4 바이트]을 읽는 법을 배우고 싶습니다. – user2097891

+4

코드가 이미 그렇게되지 않았습니까? –

답변

11

o.write은 문자를 쓰지 않으며 바이트를 씁니다 (ios :: binary로 플래그 된 경우). char는 길이가 1 Byte이므로 char 포인터가 사용됩니다.

o.write((char*)a,sizeof(a)); 

(char*) ao.write 작성해야하는지의 ADRESS입니다. 그런 다음 파일에 sizeof(a) 바이트를 씁니다. 저장되는 문자는 없으며 바이트 만 있습니다.

16 진수 편집기에서 파일을 열면 a가 int i = 10 인 경우 0A 00 00 00 (4 바이트, x64)이면 다음과 같은 메시지가 표시됩니다.

독서는 아날로그입니다.

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 


int main (int argc, char* argv[]){ 
    const char* FILENAM = "a.txt"; 
    int toStore = 10; 
    ofstream o(FILENAM,ios::binary); 

    o.write((char*)&toStore,sizeof(toStore)); 
    o.close(); 

    int toRestore=0; 
    ifstream i(FILENAM,ios::binary); 
    i.read((char*)&toRestore,sizeof(toRestore)); 

    cout << toRestore << endl; 


    return 0; 
} 
+1

안녕하세요. 문제가 있습니다. 바이너리로 파일 객체에 플래그를 지정하지 않으면 어떻게됩니까? – Darktega

0

죄송합니다 제가 질문을보고 너무 오래 걸려서 : 여기

은 작업 예입니다.

바이너리의 차이점은 바이너리가 파일을 읽고 쓰는 것이라고 생각합니다. 그러나 비 - 바이너리 (즉, 텍스트) 모드는 줄 끝 '\ n'을 캐리지 리턴 '\ r'으로 수정합니다. 수정은 '\ n'과 '\ r'또는 '\ n \ r'또는 '\ r \ n'사이에서 앞뒤로 바뀌거나 '\ n'으로 그대로 두십시오. 목표 운영체제가 Mac, Windows, Unix 등 여부에 따라 달라집니다.

정수를 읽고 쓰는 경우 정수를 읽고 쓰고 올바른 것으로 보입니다. 그러나 정수의 일부 바이트가 '\ r'및 '\ n'과 같은 경우 정수는 파일에서 올바르게 다시 읽지 않습니다.

이진수는 int를 다시 읽는 것이 항상 정확하다는 것을 보증합니다. 그러나 텍스트 모드를 사용하여 파일을 Windows의 메모장과 같은 텍스트 편집기에서 읽을 수 있도록 포맷해야합니다.