ruby 字符串#unpack

标签 ruby unpack

我有一个由 3 个字符串组成的打包字符串,这样我就有一个整数,指定下一个项目的字节长度,然后是那个项目的字节,然后是下一个项目的字节大小,等等,就好像有人做了:

[a.bytesize, a, b.bytesize, b, c.bytesize, c].pack("na*na*na*")

我怎样才能以简单的方式正确地解压它?这个问题的 Perl 解决方案是:

my($a, $b, $c) = unpack("(n/a*)3", $data)

对于 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

有更简单的方法吗?

最佳答案

恕我直言,这不像在 PERL 中那么容易,但这是我可以建议的一些解决方案。

unpacked = []
a, b, c = *unpacked << data.slice!(0, data.slice!(0, 2).unpack('S>').first) \
           until data.empty? 

关于 ruby 字符串#unpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14910394/

相关文章:

qt - 如何解压 QByteArray 中的 32 位整数?

c++ - 使用 nlohmann json 将整数列表解包为 std::vector<int>

ruby-on-rails - 日期范围不起作用

ruby-on-rails - 用于创建方法 smart_listing 的 Rails 嵌套路由

java - 如何将 python struct.unpack 转换为 java

python - 解包到Python中的list append方法

Ruby:关于定义一个类的结果

ruby-on-rails - 使用 ruby​​ 从逗号分隔的文件中提取电子邮件

ruby - rbenv 上的 ruby​​ 3.0.0 在哪里

php - 如何在 PHP 中解压 MySQL 多点几何数据?