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

| 我有一个类似C的结构:
SomeStruct << BinData::Record
endian :little

uint32 :offsetOfName
uint32 :offsetOfLastname
#...
uint32 :lenVars
struct :Person, :length => :lenVars
    string :name
    string :lname
    #...
end
我在ѭ1before之前有很多偏移量和长度。所有的偏移量和长度都描述了“ 1”结构内的数据。 如何以指定的偏移量,给定的长度或直到下一个偏移量开始读取数据?     
已邀请:
        寻求偏移量1234,然后将32个字节读入字符串
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
更新:看来BinData可以理解对自己字段长度进行编码的记录,但是我怀疑是否有任何方法可以让它寻找您,除非您愿意本质上编码所寻找空间大小的伪字段,然后永远忽略它正在跳过的数据。 我怀疑一个好的解决方案将涉及一个明确的寻求,然后是5英镑来获得记录。     
        BinData有两个与偏移量有关的选项::check_offset和:adjust_offset。这些没有记录在手册中,但是记录在bindata / offset.rb中 这是它们在您的示例中的工作方式。
class SomeStruct < BinData::Record
  endian :little

  uint32 :offsetOfName
  uint32 :offsetOfLastname
  #...
  uint32 :lenVars

  struct :person do
    string :name,  :adjust_offset => :offsetOfName,
                   :read_length => lambda { offsetOfLastName - offsetOfName }
    string :lname, :adjust_offset => :offsetOfLastName,
                   :read_length => ...
    #...
  end
end
    
        BinData文件:http://bindata.rubyforge.org/#nested_records 不熟悉BinData,所以也许我不在这里,但是示例似乎为最外层结构定义了一个类:
class SomeStruct < BinData::Record
...
然后讨论在该类中嵌套匿名结构:
  struct :person do
  ...
另外,看起来您正在给内部struct:person一个长度。我的猜测是长度不适用于此处。     

要回复问题请先登录注册