C#을 사용하여 FORTRAN을 사용하여 만든 압축 된 바이너리 파일을 읽어야합니다. 이 파일은 (이하 "포맷되지 않은 순차 파일"섹션에서 페이지 아래로 절반 방법에 대해) 여기에 설명 된대로 "포맷되지 않은 연속"형식으로 저장됩니다구조체의 내용을 이진 파일로 구문 분석
http://www.tacc.utexas.edu/services/userguides/intel8/fc/f_ug1/pggfmsp.htm
당신은 URL에서 볼 수 있듯이, 파일은 130 바이트 이하의 "덩어리"로 구성되며 각 덩어리를 감싸는 2 길이 바이트 (FORTRAN 컴파일러에 의해 삽입 됨)를 포함합니다.
그래서 컴파일러가 삽입 한 형식에서 실제 파일 페이로드를 구문 분석하는 효율적인 방법을 찾아야합니다.
파일에서 실제 페이로드를 추출한 후에 다양한 데이터 유형으로 파싱해야합니다. 그것은 다음 운동이 될 것입니다.
내 첫 번째 생각은 File.ReadAllBytes
을 사용하여 전체 파일을 바이트 배열로 스터핑하는 것입니다. 그런 다음 형식을 건너 뛰고 실제 데이터를 두 번째 바이트 배열로 전송하여 바이트를 반복합니다.
결국 두 번째 바이트 배열에는 실제 파일 내용에서 모든 형식 지정을 뺀 값이 있어야합니다. 그런 다음 필요한 형식을 얻으려면 다시 돌아가야합니다.
저는 C#을 처음 접했을 때이 점에 대해 더 잘 받아 들일 수있는 방법이있을 것이라고 생각했습니다.
또한, 그것은 도움이 경우, 이러한 파일 (30메가바이트 말), 가장하지만 ...이 기록에 의해 기록처럼 파일을 읽을 수있는
감사합니다. 귀하의 의견을 바탕으로, 나는 바이트 배열에 내 파일을로드하고 두 번째 깨끗한 바이트 배열 (길이 마커가없는)을 생성하는 몇 가지 코드를 작성했습니다.나는 지금 그것을 BitConverter를 사용하여 다양한 스칼라 값으로 파싱하려고 시도하고 있는데, 변환 할 때 배열에 자체 포인터를 유지해야하기 때문에 약간 추한 것처럼 보인다. 바이트 배열을 계속한다고 가정하면 거기에서 다양한 스칼라를 가져 오는 더 좋은 방법이 있을까요? 아, 4.0을 사용하지 않습니다 ... –
바이트 배열을'MemoryStream'으로 랩핑하고'BinaryReader'를 사용할 수 있습니다. 'BinaryReader'는 자신의 위치를 기억하므로 필요하지 않습니다. –