如何用bigint / Math :: BigInt格式化十六进制数字打印?

时间:2014-12-12 08:41:07

标签: perl perl-module

我想打印定义长度的十六进制数字,用零填充。以下代码:

use warnings;
use bigint;
$x = 0x1_0000;
$y = 0x2_0000_12345;
print $x->as_hex(),"\n";
printf("%0#12x\n", $y);

产生输出:

0x10000
0x00ffffffff

但我希望第二个数字是0x02000012345。似乎bigint不会重载格式说明符(如果可能的话)。有一个很好的解决方法吗?

更新:这似乎是Perl安装的问题。它应该在64位版本上按预期工作。这可以如下确定(来自perldoc sprintf):

use Config;
if ($Config{use64bitint} eq "define" || $Config{longsize} >= 8) {
  print "Nice quads!\n";
}

1 个答案:

答案 0 :(得分:1)

一位同事使用BigInt :: as_hex()函数向我指出了一个解决方案:

printf("0x%016s\n", substr($x->as_hex(), 2));

将打印带有填充0的16位十六进制数字。