首页 > 解决方案 > 如何在perl中将字节数组转换为int64

问题描述

我有一个要在 Perl 5 中解决的特定问题(使用最少的外部依赖项,如果可能与 5.12 版兼容),与解码这样的字节数组有关:

my @data = (0x00, 0x00, 0x00, 0x03, 0x84, 0x14, 0x40, 0x32);

我想提取这样的数字:15100821554

我尝试了几种打包/解包的变体,但没有成功

say(unpack("Q", pack("C*", @data)));

打印 3620916657624449024

go中的等效代码是这样的

data := []byte{0x00, 0x00, 0x00, 0x03, 0x84, 0x14, 0x40, 0x32}
deciseconds := int64(binary.BigEndian.Uint64(data))

可以在这里执行:https: //play.golang.org/p/I2J45H-sn-H

有任何想法吗?

标签: perl

解决方案


你快到了,以下工作:

say unpack 'Q', pack 'C*', reverse @data;
#                          ~~~~~~~

这意味着您需要相反的字节顺序,这意味着以下列方式打包:

unpack 'Q>', pack 'C*', @data;
#        ^

推荐阅读