您好可以使用perl脚本转换基数为10到36的转换数字吗?
这是一个例子:
base 10 - 1234567890123 and outcome
base 36 - FR5HUGNF
答案 0 :(得分:4)
尝试使用Math::Base36 CPAN库进行基本转换。
答案 1 :(得分:2)
查看Math::Base36
源代码,可以看出实现转换的难易程度:
sub encode_base36 {
my ( $number, $padlength ) = @_;
$padlength ||= 1;
die 'Invalid base10 number' if $number =~ m{\D};
die 'Invalid padding length' if $padlength =~ m{\D};
my $result = '';
while ( $number ) {
my $remainder = $number % 36;
$result .= $remainder <= 9 ? $remainder : chr( 55 + $remainder );
$number = int $number / 36;
}
return '0' x ( $padlength - length $result ) . reverse( $result );
}
答案 2 :(得分:0)
编写子程序来执行此操作非常简单。下面的代码没有值检查,并假设要转换的数字总是非负的
如果您的Perl版本没有足够的最新版本来支持state
关键字,那么只需将$symbols
声明为程序开头的my
变量< / p>
use strict;
use warnings;
use feature 'state';
print base36(1234567890123);
sub base36 {
my ($val) = @_;
state $symbols = join '', '0'..'9', 'A'..'Z';
my $b36 = '';
while ($val) {
$b36 = substr($symbols, $val % 36, 1) . $b36;
$val = int $val / 36;
}
return $b36 || '0';
}
<强>输出强>
FR5HUGNF