Ruby String #unpack

Spe*_*eed 5 ruby unpack

我有一个3个字符串的打包字符串,它以一种方式组成,以便我有一个整数,指定下一个项目的字节长度,然后指定该项目的字节,然后是下一个项目的字节大小等,就好像有人这样做:

[a.bytesize, a, b.bytesize, b, c.bytesize, c].pack("na*na*na*")
Run Code Online (Sandbox Code Playgroud)

如何以简单的方式正确解压缩?Perl解决这个问题的方法是:

my($a, $b, $c) = unpack("(n/a*)3", $data)
Run Code Online (Sandbox Code Playgroud)

对于ruby,它显然不支持'/'和解包中的括号,我使用的是:

vals = []
3.times do
  size = data.unpack("n").first
  data.slice!(0, 2)
  vals << data.unpack("a#{size}").first
  data.slice!(0, size)
end
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

Stu*_*t M 0

我没有找到像 Perl 解决方案那样容易做到这一点的方法(并且同意提交一个功能请求以将其添加到 Ruby 的 pack/unpack 实现中会很好),但我至少可以用更少的时间提供解决方案如果有帮助的话:

vals = []
until data.empty?
  vals << data.slice!(0, data.slice!(0,2).unpack('n').first.to_i).unpack("a*").first
end
Run Code Online (Sandbox Code Playgroud)