使用 ruby 以不同大小的块读取二进制文件

Read binary file in chunks of different size with ruby

我正在尝试读取一个包含可变大小块的二进制文件。每个chunk的大小位于每个chunk开头的固定位置。

文件组成如下:

我目前有下面的代码提取主要 header 和块 header,第一个块的大小和数据,但我是新手, 我一直在思考如何对所有块重复这个过程。

有人可以帮我处理一下吗。

FILENAME="file.bin"

open(FILENAME, "rb") do |z|
    mainheader = z.read(20).unpack('H*')  

    puts mainheader

    puts "############### Chunk No. 1 ######################"

    chunkheader = z.read(16)                                 
    chunksize = z.read(4).unpack('H*')[0].hex
    data = z.read(chunksize).unpack('H*')

    puts chunkheader.unpack('H*')
    puts chunksize
    puts data                    
end

就环绕:

puts "############### Chunk No. 1 ######################"

chunkheader = z.read(16)                                 
chunksize = z.read(4).unpack('H*')[0].hex
data = z.read(chunksize).unpack('H*')

puts chunkheader.unpack('H*')
puts chunksize
puts data 

带循环:

while chunkheader = z.read(16) do
  puts "############### Chunk ######################"
  chunksize = z.read(4).unpack('H*')[0].hex
  data = z.read(chunksize).unpack('H*')

  puts chunkheader.unpack('H*')
  puts chunksize
  puts data 
end

上面的循环将被终止,因为文件中没有更多数据了。请注意,上面的片段通常容易出错,因为它希望文件没有损坏,并且如果最后一个块头报告错误的字节数将会失败。

但你的情况似乎没问题。