hul*_*yer 5 c# encoding binaryfiles packing geospatial
我正在尝试打开并读取一堆二进制格式的地理参考时间日志文件。他们应该遵循农业机械的 ISO-11783 (ISOBUS) 标准,但在阅读了 100 多页标准后,我无法弄清楚如何使用十六进制编辑器或以编程方式使用 .NET c# 读取文件。我知道时间日志以文件对的形式出现:一个 xml 文件和一个二进制文件。例如,二进制文件名为 TLG00004.bin,在记事本中它看起来像这样(部分):
当我在 Visual Studio 2015(社区)中将该文件作为二进制文件打开时,十六进制如下所示:
这对我没有帮助。我什至不知道如何开始将其作为代码中的字节流(或其他任何内容)阅读。
我知道文件应该以人类可读的形式看起来像这样:(TimeStart, PositionNorth, PositionEast, PositionStatus, # DLV, DLV 0, PDV 0, DLV 1, PDV 1, DLV 2, PDV 2,...)最多可以有 255 个 DLV-PDV 对,我认为它们是 32 位整数。一个例子显示为:(2005-05-02T16:32:00,51.00678,6.03489,1,2,0,10,1,15)
我在文档中看到的一些小提示向我表明这必须是 utf-8 和 base64 编码,带有小端和无字节顺序标记。但是我尝试在 Hexinator 的免费版本中打开它,并且无法(人类)使用该应用程序中的数十种编码中的任何一种来读取它,包括 utf-8、16、32...
我知道这不是正常的编程内容,但我把它扔在那里,看看我是否足够幸运,之前有人做过这件事并看到了这一点。任何提示或资源指向都会让我感激不尽,如果有人可以分享任何读取此类文件的代码,我将非常感激。
您的数据似乎遵循“日志数据二进制文件结构”数据交换的 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();
}
Run Code Online (Sandbox Code Playgroud)
如果您需要进一步的帮助,您现在可以询问有关 C# 中字节解析的具体问题。
归档时间: |
|
查看次数: |
1383 次 |
最近记录: |