我想打印定义长度的十六进制数字,用零填充。以下代码:
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";
}
答案 0 :(得分:1)
一位同事使用BigInt :: as_hex()函数向我指出了一个解决方案:
printf("0x%016s\n", substr($x->as_hex(), 2));
将打印带有填充0的16位十六进制数字。