我正在尝试打开并读取一堆二进制格式的地理引用时间日志文件。他们应该遵循农业机械的 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();
}
如果您需要进一步的帮助,您现在可以询问有关 C# 字节解析的具体问题。
关于c# - 有人有阅读 ISOBUS (ISO 11783-10) 二进制时间日志文件的经验吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783868/