请问在perl中如何将一个天文十进制数转换为16进制数

ljmat427 2007-04-20 02:13:15
比如我有一个十进制数为 220能正常转换为16进制数,但如果这个十进制数很大像5643797816937730 就不能正确转换为16进制数,请教高手有什么办法能将这这样的十进制数转换为16进制数吗?
...全文
904 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2007-04-21
  • 打赏
  • 举报
回复
use strict;

use Math::BigInt;

my $big = '56437978169377301';

my $x = Math::BigInt->new($big);;

print $x->as_hex();

现在OK了。数字要加引号。
ljmat427 2007-04-21
  • 打赏
  • 举报
回复
在lib目录下发现使用 bigint和bignum都能得到正确的结果,
使用Math::BigInt不行,我觉得应该是执行下面这个方法时也只能转换满足少于17长度的十进制数据
my $x = Math::BigInt->new($big);
xyzxyz1111 2007-04-21
  • 打赏
  • 举报
回复
我认为并非Math::BigInt->new方法不能转换超过17位的整数,而是传入的参数只是一个普通的整数,被perl解释器截断了.
ljmat427 2007-04-21
  • 打赏
  • 举报
回复
56437978169377301
对于这个长度为17的十进制数据,用Math::BigInt和 使用bignum包中as_hex()所得到结果不一样。
Math::BigInt 转换为十六进制的值为:0xc8820ac8a08214
bignum包中as_hex() 转换为十六进制的值为:0xc8820ac8a08215
很明显使用Math::BigInt方法不能转换长度超过16的十进制数据
xyzxyz1111 2007-04-21
  • 打赏
  • 举报
回复
Math::BigInt有16位的限制吗?

use bignum;

$a= 564234242489278132329299623462424234994342924324341234423448;

print $a->as_hex()."\n";
ljmat427 2007-04-21
  • 打赏
  • 举报
回复
谢谢楼上的,但是Math::BigInt这个方法也只能转换长度为16位的十进制的值,如果为16位以后像95643797816937730这样长度超过16位的转换后的值不是正确的。请问一下还有更好的方法吗?谢谢
iambic 2007-04-20
  • 打赏
  • 举报
回复
use strict;

use Math::BigInt;

my $big = 5643797816937730;

my $x = Math::BigInt->new($big);;

print $x->as_hex();

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧