如何开始读取二进制数据的偏移量?

omn*_*nse 6 ruby binary-data bindata

我有一个类似C的结构:

SomeStruct << BinData::Record
endian :little

uint32 :offsetOfName
uint32 :offsetOfLastname
#...
uint32 :lenVars
struct :Person, :length => :lenVars
    string :name
    string :lname
    #...
end
Run Code Online (Sandbox Code Playgroud)

我之前有很多偏移和长度:Person.所有偏移量和长度都描述了:Person结构中的数据.

如何在指定的偏移量,给定长度或直到下一个偏移量开始读取数据?

Dig*_*oss 4

求偏移量1234,然后读入32个字节到String中s:

open 'some-binary-file', 'r' do |f|
  f.seek 1234
  s = f.read 32
  # tho in your case, something like:
  o = aBinData_object.read f
  p s
end
Run Code Online (Sandbox Code Playgroud)

更新:看起来 BinData 理解对自己字段的长度进行编码的记录,但我怀疑是否有任何方法可以让它寻找你,除非你愿意对虚拟字段进行编码,其大小与所寻找的空间大小相同,然后永远忽略它跳过的数据。

我怀疑一个好的解决方案将涉及显式查找,然后someBinDataObject.read(f)获取记录。