2011-11-17 2 views
1

이진 데이터를 파일에 쓰는 프로그램을 작성하고 있습니다. Windows에서는 결과 파일이 Linux보다 약간 작습니다. 바이트의 크기와 MD5 해시는 모두 다릅니다. 동일한 코드로 어떻게 이런 일이 발생할 수 있습니까? Windows에서 이진 파일이 Linux보다 작게 나타납니다.

ofstream output("output", ifstream::binary); 
output << std::noskipws; 

나는 내 프로그램에 응용 프로그램 검증 도구를 실행하고 가능한 메모리 손상에 대한 오류 또는 경고를 생성하지 않았다 ...

나는 이미 ifstream::binary 플래그를 추가하고 난 noskipws을 설정 확인했다.

파일 출력이 다를 수있는 다른 이유가 있습니까?

+2

이 효과가 나타나는 완전한 프로그램을 게시 할 수 있습니까? –

+9

16 진수 편집기를 사용하여 해당 파일을 비교해보고 그 차이점을 확인하십시오. – JosephH

+0

어떤 유형의 이진 데이터를 쓰고 있습니까? 텍스트입니까? –

답변

2

차이점은 아마도 개발 환경이 다르기 때문일 수 있습니다. 다른 컴파일러, 하드웨어 및 운영 체제는 모두 기본 데이터의 형식을 변경할 수 있습니다. 예를 들어, 다른 컴파일러는 데이터 구조를 다양한 양의 효율성으로 묶을 수 있습니다. 또한 기본 유형 (int, longs, float 등)은 프로세서가 다르기 때문에 크기가 다를 수 있습니다. 한마디로

, 이진 데이터 간의 호환성 크로스 플랫폼을 필요로하는 프로그램은 데이터를 읽기 위해 현장에서 자주 (바이너리 형식으로 구조와 값을 포장에 대한 매우 정확한 규칙 및 동등하게 정확한 규칙을 개발한다.

+0

* 예를 들어, 서로 다른 컴파일러가 데이터 구조를 다양한 양의 효율로 묶을 수 있습니다. *이 각도를 자세히 조사 할 것입니다. 아마도 이것이 문제가되는 것이 맞을 것입니다. – Pieter

1

보지 않고 정확히 파일에 무엇을 쓰고 있는지 그리고 어떻게 호출하는지, 정말 유용한 답을 제공하기는 어렵지만, 파일 삽입 작업을 위해 스트림 삽입 연산자 (일명 형식화 된 출력 연산자)를 사용한다면, 문자열 데이터는 로캘 설정에 따라 문자열로 변환됩니다. 실제로 수행중인 작업 인 경우 ofstream::binary을 사용하면 어쨌든 텍스트를 쓰고 있기 때문에 다소 의미가 없습니다.

차이점이 무엇인지에 대해 가능한 가장 작은 예제를 작성하고 16 진 편집기에서 출력을 검토하여 진행 상황을 확인하는 것이 좋습니다.

관련 문제