Ruby 如何使用BinData?

Ruby 如何使用BinData?,ruby,bindata,Ruby,Bindata,我试图解析一个二进制文件,但我不太明白如何正确使用它 二进制文件的设置方式如下所示: 前4个字节(UINT32)表示属性名的长度 接下来的8*长度表示属性名称(作为字符串) 接下来的4个字节(UINT32)表示属性类型的长度 接下来的8*长度表示属性类型(作为字符串) 接下来的8个字节(UINT64)表示数据的长度 在此之后,数据可以是任意数量的字节(取决于数据的类型,可以是int(4)、string(4*len)、float(4)或数组) 在此之后,该过程将使用下一个属性重复 我想我的问题是:

我试图解析一个二进制文件,但我不太明白如何正确使用它

二进制文件的设置方式如下所示:

  • 前4个字节(UINT32)表示属性名的长度
  • 接下来的8*长度表示属性名称(作为字符串)
  • 接下来的4个字节(UINT32)表示属性类型的长度
  • 接下来的8*长度表示属性类型(作为字符串)
  • 接下来的8个字节(UINT64)表示数据的长度
  • 在此之后,数据可以是任意数量的字节(取决于数据的类型,可以是int(4)、string(4*len)、float(4)或数组)
  • 在此之后,该过程将使用下一个属性重复

    我想我的问题是:

  • 当我调用MyBinDataClass.read()时,我如何为它提供正确的读取部分,而不是整个文件,并且由于我不知道每个属性的实际长度(它们因类型而异),如何正确地划分它

  • 如何使单个BinData处理不同的属性类型


  • 到目前为止你试过什么?BinData自述似乎会让你有一个好的开始。至少它清楚地显示了如何使用
    uint32
    方法完成(1)。自述中链接到的wiki有大量信息。我更新了我的原始帖子,以便更好地定义我的实际问题。当你说“下一个8*长度”时,你是指8位还是8字节?如果你给我们一个你正在使用的数据样本,这会容易得多。在和之间,我认为你应该能够找出如何开始。维基中只有八页内容。它特别提到跳过未使用的数据和处理类型长度值字段。在开始编写代码之前,您不需要知道如何解决问题的每一部分。我认为你只需要自述和一些尝试和错误就可以解决1-5题。这样做,然后担心#6以后,当你更熟悉这个工具时。嘿,乔丹,我接受了你的建议,浏览了一下维基,我想我已经了解了大部分!然而,我在选择方面确实遇到了麻烦。我不知道如何存储实际数据,因为我如何读取数据取决于数据的类型。