【问题标题】:How do I use "pack/unpack" in Perl?如何在 Perl 中使用“打包/解包”?
【发布时间】:2011-12-27 23:36:16
【问题描述】:

当我使用Ruby 语言解析数据时,我的数据被编码为 64 位网络字节顺序,如下所示:

def unpack_string(str)
   binary = str.unpack('m*').first
   binary.unpack('G*')
end

my_array_of_floats = unpack_string(str)

如何使用 Perl 的 pack/unpack 做同样的事情?

【问题讨论】:

  • 谢谢,我已经参考了那个文档。如您的链接所示,但仍然无法弄清楚,您能给我更多提示吗?

标签: perl unpack


【解决方案1】:

查看 Ruby 文档,

  • m 是 MIME base64 编码。
  • G 是双精度、网络(大端)字节顺序

Perl 的 unpack 不支持 base64,但 MIME::Base64 可以。

在 Perl 的 unpack 中,d 是双精度。您可以使用> 指定字节顺序。

use MIME::Base64 qw( decode_base64 );
my @nums = unpack 'd>*', decode_base64 $str;

> 是在 Perl 5.10 中引入的。

【讨论】:

  • 感谢您的回复,我确实使用 MIME::Base64 来解码数据以获取您提到的二进制数据。我也试过你的建议,还是不行。
  • 以下是一个示例数据:`我的$ STR1 ='eJxM3Xc8lt // OPDQosxoiYwWQlaavIiGklnaISQle932yF7Jyp5llS0lmSkpZaSozHprSDLa4 / F + VC / 5fu6X / 56Pc65zXq9z7vu6zrVuYF / P4ty8sW8W / QP7 + jkePFzFyOy + X + WSkDkDC9NTmH7SM8C + 5w1y37t6z2fI / dOuf + WRH // KP5pEHmX / + + F4YnN9vGST wF9gUAFRTy74EH9aaclRCvHxr4B4SnIt93K4NJ1nTPxVcdR4Anx / JdH2fu5dMSaD2v97YOD5C6Y72Ixz + L4gzzt7JonxPzvwxOgrjn1AjrcLTL2NnBTdm9OJnFYiw6qEnPXYv3IEfOtdgPjKeF / dcwg6U0LLC7kURFZASF8fdbF0eM81CHl + lLp83 + hICATdOk9945zGzjLwX';双精度,网络字节序,64位解码
  • 因为它是使用zlib lib压缩的,所以我在使用unpack之前所做的是:<code> my $base64_decoded = decode_base64($str); my $uncompress_; my $input = \$base64_decoded; inflate $input => \$uncompress_; </code>
  • 您好池上,感谢您的回复,我更新了我的perl版本,再试一次,它工作正常。再次感谢!
  • @Peter Mortensen,spec 将其视为常规单词(“base64”,除非在句首)。实际值不区分大小写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2019-06-27
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多