gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:29 25 4
gpt4 key购买 nike

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

文件组成如下:

  • 主 header = 文件的前 20 个字节
  • Main header 之后是所有 block 。
  • 每个 block 都有一个 16 字节的 header
  • chunk header之后的4个字节表示chunk的大小。

我目前有下面的代码可以提取第一个 block 的主 header 和 block header 、大小和数据,但我是新手,并且我陷入了如何对所有 block 重复此过程的问题。

请有人帮我解决这个问题。

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

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

但在您的情况下似乎没问题。

关于ruby - 使用ruby以不同大小的 block 读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com