2013-03-03 3 views
2

포트란 코드로 생성 된 바이너리 파일이 있습니다. 이 파일에는 복식 배열이 포함되어 있습니다. 내 C 프로그램에서 열어야하고 일반적인 배열과 같이 작업해야한다.C에서 fortran 바이너리 파일을 읽으려면 어떻게해야합니까?

어떻게해야합니까?

어떻게 이진 파일에 이중 유형이 표시됩니까?

+2

여러 가지 방법으로 fortran이 파일을 쓸 수 있습니다. 열기 및 쓰기 문을 볼 필요가 있습니다. – agentp

답변

6

거의 모든 포트란 컴파일러있어, (즉, 바이너리) 포맷되지 않은 순차 파일, 시작 부분에 레코드의 길이를 작성하고 각 레코드의 끝. 일반적으로 길이는 4 바이트로 작성되지만 일부 컴파일러는 8 바이트를 사용합니다. 레코드는 단일 Fortran 쓰기 문으로 작성된 모든 것입니다. 이 배열에이 유형의 파일이있는 단일 Fortran 쓰기 문으로 작성된 경우 건너 뛸 4 바이트 또는 8 바이트, 배열, 4 바이트 또는 8 바이트의 추가 바이트가 있습니다. 16 진수 편집기로 파일을 보면이 사실을 알 수 있습니다. 배열이 다중 쓰기 명령문으로 조각 (예 : 열 또는 행)으로 작성된 경우 각 레코드는이 구조를 갖습니다.

파일이 Fortran에서 포맷되지 않은 것으로 기록 된 경우 Fortran 이중 유형은 해당 컴퓨터의 이진 표현 형식으로 기록됩니다. 동일한 컴퓨터 유형에서 C로 읽을 수 있어야합니다. 단순한 언어가 아닌 아키텍처를 변경하는 경우 이진 표현이 다를 수 있습니다.

Fortran에는 레코드 길이 정보를 포함하지 않는 다른 파일 액세스 방법이 있습니다. 예를 들어 직접 액세스. 스트림 액세스의 새로운 방법은 언어 간 호환성을 위해 설계되었습니다.

배열이 다차원 인 경우 Fortran에 행 주요 배열이 있고 C에 행 우선 행렬이 사용되기 때문에 배열을 조판 할 수 있습니다.

관련 질문 : 내 자신의 생각에 Fortran unformatted file formatreading fortran unformatted file with python

1

원칙적으로 당신은 할 수 없습니다.

포트란 이진 파일의 형식은 이며, 지정되지 않은입니다. 즉, 프로그램 상태를 포트란 바이너리 파일에 저장하고 같은 포트란 구현을 사용하여 다시 열 수는 있지만 다른 포트란 구현을 사용하더라도 안정적으로 그렇게 할 수는 없습니다.

이제 상태를 건강하게 저장할 수있는 제한된 방법이 있으므로 주어진 Fortran 바이너리 파일의 구조를 충분히 자세하게 설명 할 수 있습니다. C 프로그램에서 열고 내용을 읽으십시오. 그러나이 지식은 문제의 포트란 컴파일러에 따라 다릅니다.

가장 좋은 방법은 말하자면 [0, 1, 2, 3, 4, 256, 65536, 65537, 1e10, 1e20, 1e30, 1e40]을 포함하는 포트란 배열을 작성하여 이진 파일에 작성하고 이진 편집기를 사용하여 무엇이 있는지 확인하는 것입니다. 그 후

, 당신은 .... 난 두려워 자신에

1

, 더 나은 방법 포트란 바이너리를 읽을 수는 C에 포트란 및 패스 배열에서 에서 그들을 읽을 사실이다. 그것은 당신에게 많은 고통을 줄 수 있습니다.

  1. 실제로 바이너리
  2. 는 C.에서 호출하기 위해 서브 루틴을 감싸 읽을 수있는 서브 루틴을 쓰기

가장 어려운 부분은 포트란 서브 루틴을 감싸는 것입니다. C와 포트란 사이의 이름 맹 글링은 직설적이지 않습니다. 이는 사용하는 컴파일러 (즉, 플랫폼) 및 Fortran 버전에 따라 다릅니다. 간단한 예제는 herehere입니다.

첫 번째 선택은 적절한 컴파일 옵션을 사용하여 "수동"으로 수행하는 것입니다.

: 알 수있는 당신이 리눅스 또는 DLL 수출 뷰어와 같은 도구에 나노 명령을 사용할 수 있습니다 맹 글링.

더 나은 선택은 동작의이 종류를 처리하는 데 도움이 모듈 iso_c_binding을 소개 포트란 2003을 사용하는 것입니다.

관련 문제