如何将字节数组转换为perl中的整数

时间:2011-01-03 07:41:03

标签: perl bytearray

在Java中我会做

System.out.println(new BigInteger(new byte[]{0,(byte)171,52,33}).intValue());

你会怎么用Perl做的?

2 个答案:

答案 0 :(得分:2)

使用packunpack

C:\Users\pgp\Documents\src\tmp>cat pack.pl
use Modern::Perl; # strict, warnings, v5.10 features

say unpack "N", pack "C4", 0, 171, 52, 33; # big endian
say unpack "V", pack "C4", 0, 171, 52, 33; # little endian

C:\Users\pgp\Documents\src\tmp>perl pack.pl
11220001
557099776

我不记得Java指定的endianness,但你可以选择。

编辑:正如ysth所指出的那样,这有32位的限制。我认为有pack个选项,最多64位,但没有更进一步。如果你需要任意精确度,他的答案会更好。

答案 1 :(得分:1)

我猜你会想要这样的东西:

#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Math::BigInt;
say Math::BigInt->new( '0x' . join('', map sprintf('%.2x', $_), 171, 52, 33) );

这会将数组元素转换为十六进制字符串0xab3421,并使用它来创建bigint。