2017-01-21 11 views
1

바이너리 형식의 지리적 참조 된 timelog 파일을 열어 읽으려고합니다. 그들은 아마도 농기계의 ISO-11783 (ISOBUS) 표준을 따를 것이지만, 100 페이지 분량의 표준 페이지를 읽은 후에 16 진수 편집기 나 프로그래밍 방식으로 .NET C#을 사용하여 파일을 읽는 방법을 알 수 없습니다. timelog는 파일 쌍 (xml 파일과 바이너리 파일)으로 제공된다는 것을 알고 있습니다. 바이너리 파일은, 예를 들어, TLG00004.bin 이름 및 메모장에는 다음과 같습니다 (부분) :누구나 ISOBUS (ISO 11783-10) 바이너리 타임 로그 파일을 읽은 경험이 있습니까?

binary file in Notepad

을 나는 바이너리 파일로 비주얼 스튜디오 2015 (커뮤니티)에서 해당 파일을 열 때 진수는 다음과 같습니다

enter image description here

나에게 도움이되지 않는다. 이 코드를 바이트 스트림으로 읽는 방법을 모르겠습니다.

내가 파일을 사람이 읽을 수있는 형태로 다음과 같이하도록되어 알고 (TimeStart, PositionNorth, PositionEast, PositionStatus, #의 DLV, DLV 0, PDV 0, DLV 1, PDV 1, DLV 2, PDV 2, ...)에는 최대 256 개의 DLV-PDV 쌍이 있으며 32 비트 정수라고 생각됩니다. 예가 다음과 같이 표시되었습니다 : (2005-05-02T16:32:00,51.00678,6.03489,1,2,0,10,1,15)

약간의 힌트 설명서에서 보았 듯이 이것은 little endian과 Byte Order Mark가없는 utf-8 및 base64 인코딩이어야합니다. 그러나 나는 이것을 Hexinator의 무료 버전에서 열어 보았고 utf-8, 16, 32 등의 수십 가지 인코딩을 사용하여 (인간이) 읽을 수는 없었습니다 ...

나는 이것이 알고 있습니다. 평범한 프로그래밍 물건이 아니지만 누군가가 전에 이것을 해내 며 이것을 볼 수있을만큼 운이 좋은지 알아보기 위해 그것을 던지고 있습니다. 어떤 힌트 나 리소스를 가리켜 주셔서 감사 드리며, 누군가이 파일을 읽는 코드를 공유 할 수 있다면 매우 감사 할 것입니다.

+0

http://www.isoblue.org/traces.html에서 도움이되는 유용한 정보/단서를 찾을 수 있습니다. 호기심에서 데이터를 어떻게 수집하고 있습니까? 나는 데이터를 얻기위한 쉬운 솔루션을 찾고 있기 때문에 귀하의 게시물을 발견했습니다. –

+0

표준 문서는 자정부터 32 비트 : 밀리 초, 1980 년 1 월 1 일부터 16 비트 : 일로 이진 형식이 시작됨을 보여줍니다. 붙여 넣은 것을 풀면 다음과 같이 나타납니다 :'36604180','13059'. 2015-10-03 10:10:04와 같습니다. 이것은 당신의 기대와 일치합니까? –

+0

@David Osborn의 Isoblue를 참조 해 주셔서 감사합니다. 임무가 마음에 들지만 내 앱을보기 위해 더 많은 코딩을 조사해야합니다. 이미 기기가 있고 데이터를 '잠금 해제'하고 싶습니다. 이 데이터는 파종기에서 결합하는 Case/Trimble 출력량 모니터에서 가져옵니다. – hullflyer

답변

2

귀하의 데이터는 "로그 데이터 이진 파일 구조"데이터 교환을위한 ISO 11783-10 표준을 따르는 것으로 보입니다.

사양에 따라 데이터 유형으로 이진 데이터의 압축을 풀어야합니다. 예를 들어, 데이터의 처음 32 비트는 자정 이후 32 비트 부호없는 정수로 저장된 밀리 초입니다. 다음 16 비트는 1980-01-01이 16 비트 부호없는 정수로 저장 된 이후의 일입니다.

이진 데이터의 압축 풀기는 프로그래밍 언어에 따라 다르며 일부 프로그래밍 언어에는 이진 데이터를 이동하는 데 도움이되는 유용한 라이브러리가 있습니다.

귀하의 질문은 ISOBUS의 일반적인 구문 분석에 대한 것이므로 귀하의 주어진 언어 (C#)에 능숙하지 않으므로 귀하에게 초기 포인터 만 제공 할 수 있습니다.

BinaryReader

는 스트림에서 비트의 수를 읽고 그것을 통해 포인터 발전하여 바이너리 파일을 풀고의 이상적인 방법을 것 같아요 :

using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open))) 
     { 
      milliSecondsSinceMidnight = reader.ReadUInt32(); 
      daysSince1980 = reader.ReadUInt16(); 
     } 

도움이 더 필요하면을, 당신은 지금을 요청할 수 있습니다 C#에서 바이트 파싱에 대한 특정 질문.

+0

나는 McCormack 씨에게 매우 감사드립니다, 감사합니다. 나는 binaryreaders와 같은 것들이 있다는 것을 몰랐다. 당신의 추가 노력은 제가 시작하는데 필요한 약간의 향상이었습니다. 파일은 모두 '언 패킹'되고 파싱됩니다. – hullflyer