-1

目前我正在使用BinData gem来解析二进制文件格式。它工作得很好,除了我不知道在哪里停下来。该文件分为我使用 BinData Records 读取的属性。可以有 16 到 18 个属性(取决于它所采用的文件)。所以,如果我这样做:

16.times{
    # parse data from property.
}

当有 16 个属性时,它工作得很好,但是,如果我将它增加到 17 个,我会收到以下错误。

'readbytes': End of file reached (EOFError)

我的问题是,我怎样才能一起避免 16 次并让它读取,直到它读取它可以读取的所有属性,然后在它到达文件结尾错误时停止。

4

1 回答 1

0

示例/tcp_ip.rb

  class PcapFile < BinData::Record
    endian :little

    struct :head do
      uint32 :magic
      uint16 :major
      uint16 :minor
      int32  :this_zone
      uint32 :sig_figs
      uint32 :snaplen
      uint32 :linktype
    end

    array :records, :read_until => :eof do
      uint32 :ts_sec
      uint32 :ts_usec
      uint32 :incl_len
      uint32 :orig_len
      string :data, :length => :incl_len
    end
  end

该示例中采用的方法是告诉 BinData 有一个记录数组,然后让它们全部读取。

于 2016-06-12T05:55:24.443 回答