2014-10-23 2 views
-1

정수를 파일에 쓰고 나중에 읽으 려한다고 가정합니다. 각 정수가 파일에서 정확하게 4 바이트를 차지하도록하는 유일한 방법은 바이너리 파일에 쓰는 것입니다.C++의 이진 파일에 정수 작성

+0

아마도''std :: ostream :: write()'] (http://en.cppreference.com/w/cpp/io/basic_ostream/write)를 사용하고 싶을 것입니다. –

답변

3

, 당신은 뭔가를 할 수 있습니다. 읽고 쓰는 위치는 read이고 write이기 때문에 char *으로 전송해야합니다.

sizeof을 사용하면 4 바이트가 아닌 정수에서도 작동하지만 물론 2 바이트 정수가있는 컴퓨터에서는 4 바이트 정수를 읽을 수 없으며 그 반대의 경우도 마찬가지입니다.

물론 저장소를 "이동식"으로 만들려면 바이트 순서를 신경 써야합니다. 그러나 로컬 컴퓨터에 일부 데이터를 저장하는 경우이 작업을 수행하면 문제가되지 않습니다.

+0

이 쓰기 함수는 기본적으로 추가되거나 새 정수를 추가 할 때 커서를 파일 끝으로 이동해야합니까? – user3639557

+0

쓰기 커서를 놓기 위해'seekp'를 사용하거나'std :: ios :: append'를 사용하여 파일에 추가 할 필요가 있습니다. –

+0

@ 갈릭 : 예, 해결되었습니다. –

2

네가 맞아, 32 비트 정수라고 가정 해.

파일에 정수로 쓰면 텍스트 편집기에서 읽을 수 없지만 정확히 정수 크기가됩니다.

+0

그런 다음 이진 파일의 시작 부분부터 시작할 수 있습니다. 이제 막 4 바이트 블록을 작성하고 읽은 후 실제 정수를 검색 할 수 있습니다. 권리? – user3639557

+0

예. 파일은 영구 메모리의 큰 풀과 같습니다. 4 바이트 정수를 넣으면 나중에 파일의 시작 부분에서 같은 양의 바이트를 읽으면 동일한 정수가 반환됩니다. – tiledcode

0

일반 텍스트가 아닌 바이너리 형식으로 파일에 정수를 써야하는 이유는 무엇입니까?

각 정수는 정확히 4 바이트를 차지합니다. => 모든 정수가 4 바이트로 표현 될 수 있다고 확신하는 경우 정수의 크기에 따라 다릅니다. 그리고 이것은 파일 형식을 강제로 바이너리로 만드는 것과는 아무런 관련이 없습니다. 일반 텍스트 파일을 직접 사용하여 정수를 저장할 수 있습니다. 그러나 파일을 좀 더 압축하기를 원하면 이진 파일을 사용해보십시오.

그리고 바이너리 파일을 사용하여 일괄 읽기를 구현하는 것이 더 쉽습니다. 그러나 당신이 그것을 필요로하는지 의문입니다.

std::ofstream os("myfile.bin", std::ios::binary); 
int x = 42; 
os.write(reinterpret_cast<char*>(&x), sizeof(x)); 

읽기가 정확히 같은 방식으로 std::ifstream::read에 의해 수행됩니다 std::ofstream를 사용

+1

두 가지 해결책 중 하나는 이유가 있습니다. 바이너리 형식을 사용하면 "번역 없음"과 크기 때문에 더 빠릅니다. 좋거나 나쁜 것일 수있는 "읽을 수없는"것입니다. 텍스트 형식을 사용하면 더 이식성이 뛰어나며 텍스트 편집기에서 읽고 편집 할 수 있습니다. 현재 수행중인 작업에 따라 다시 좋거나 나 빠질 수 있습니다. –